LoginSignup
1
2

More than 3 years have passed since last update.

Railsの開発環境でサブドメインをテストする

Last updated at Posted at 2020-04-25

概要

Railsではデフォルトではlocalhost:3000で開発環境にアクセスできますが、
ルーティングをサブドメインで切り替えるテストをしたいなと思った時にハマったので、解決策を示します。

ルーティング

routes.rb
# hostがexample.comの時だけアクセスさせたい
constraints host: example.com do
  get 'top', to: 'top#index'
end

新しいドメインを追加する

OSがmacまたはlinuxの場合は、/etcディレクトリに、windowsの場合はC:\Windows\System32\driversに存在するhostsファイルに新しいドメインを追加します。

hosts
127.0.0.1   localhost   example.com

これで、127.0.0.1というIPアドレスにlocalhostとexample.comというホスト名を設定できました。

Blacked Hostsの設定

Rails6を使用している場合は、アクセス可能なホストにexample.comを追加しましょう。
Blacked HostsはRails6の新機能で、ブラウザがRailsアプリケーションにアクセスする際に使用できるホスト名を制限するためのものです。
デフォルトでlocalhostのみが許可されています。

config/initializers/blocked_hosts.rb
Rails.application.configure do
  config.hosts << "example.com"
end

これで、以下サブドメインにアクセスすることができます。
http://example.com:3000/top

おまけ

ちなみに、blocked_hostsを追加するとrspecが通らなくなるので、rpsec用のホストを追加します。

test_spec.rb
Spec.describe "Admin::StaffMembers", type: :request do
  p admin_staff_members_url
end

結果:
"http://www.example.com/admin/staff_members"

rspecではホストがwww.example.comでアクセスしているようなので、blocked_hostsにwww.example.comを追加します。

config/initializers/blocked_hosts.rb
Rails.application.configure do
  config.hosts << "example.com"
  # rspecが通らないので、以下ホストを追加
  config.hosts << "www.example.com"
end

これで、テストが通るようになります。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2