我尝试设置我的rails 4.1 app适用于多个子域名,我看到Rails Casts - #221,但我有任何问题:
我在制作中的域名是:transporte.adm.br
*无法显示!
因为它有2个域adm.br
,所以我无法完成这项工作。
我的/ etc / hosts:
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
127.0.0.1 transporte.adm.br
127.0.0.1 *.transporte.adm.br
routes.rb中:
Rails.application.routes.draw do
get '/' => 'login#index', :constraints => { :subdomain => /\bsecure\b/ }
resources :client
constraints(Subdomain) do
get '/' => 'client#index'
end
root :to => 'home#index'
end
url_helper:
module UrlHelper
def with_subdomain(subdomain)
subdomain = (subdomain || '')
subdomain += '.' unless subdomain.empty?
[subdomain, request.domain(2), request.port_string].join
end
def url_for(options = nil)
if options.kind_of?(Hash) && options.has_key?(:subdomain)
options[:host] = with_subdomain(options.delete(:subdomain))
end
super
end
end
subdomain.rb:
class Subdomain
def self.matches?(request)
request.subdomain(2).present? && request.subdomain(2) != 'www'
end
end
我要做的是:当我访问路线时secure.transporte.adm.br
=> '登录#指数'当我访问任何其他子域路由到=> '客户端#索引'没有子域to => '#家指数'
使用lvh.me:3000
工作正常,但是当我尝试使用我的域transporte.adm.br
时没有!
当我使用transporte.adm.br访问任何路线时,没有任何事情发生......
谢谢大家!
答案 0 :(得分:1)
您需要做的是告诉Rails您的TLD的长度。
将此添加到您正确的环境中(最有可能config/environments/production.rb
)
config.action_dispatch.tld_length = 2
然后request.subdomain应自动为您返回正确的部分