Use Subdomains Locally In Rails
Use Subdomains Locally In Rails
To use subdomains locally in Rails, set the hosts explictly or update the top level domain length.
Routes file with the app.
subdomain constraint:
# config/routes.rb
Rails.application.routes.draw do
root "marketing#index"
constraints subdomain: "app" do
get "/", to: "posts#index"
end
end
Option 1: Set hosts
# config/environments/development.rb
Rails.application.configure do
config.hosts = ["app.example.localhost", "example.localhost"]
end
# Add hosts to your /etc/hosts file
127.0.0.1 app.example.localhost
127.0.0.1 example.localhost
Option 2: Update the top level domain length
# config/environments/development.rb
Rails.application.configure do
config.action_dispatch.tld_length = 0
end
# Add hosts to your /etc/hosts file
127.0.0.1 app.localhost
Test Setup
minitest
# test/application_system_test_case.rb
require "test_helper"
class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
def setup
Capybara.app_host = "http://app.localhost"
end
driven_by :selenium_chrome_headless, using: :chrome, screen_size: [1400, 1400]
end
rspec
# This file is copied to spec/ when you run 'rails generate rspec:install'
require "spec_helper"
ENV["RAILS_ENV"] ||= "test"
require_relative "../config/environment"
require "rspec/rails"
Capybara.app_host = "http://app.localhost"
RSpec.configure do |config|
# ...other config
end
To test another subdomain, set the Capybara.app_host
before a test block.