我使用 devise 定义了几种类型的用户(成员、company_users 等),并且我想为每种类型用户的登录页面使用不同的子域。
我提到了this railscast以实现子域的匹配并重定向到相应的操作。我的 routes.rb
文件如下所示:
devise_for :company_users, :controllers => { :registrations => 'company_users/registrations', :sessions => 'company_users/sessions' }
devise_scope :company_user do
constraints Subdomain do
match '/' => 'company_users/sessions#new'
end
end
还有我的lib/subdomain.rb
文件:
class Subdomain
def self.matches?(request)
request.subdomain.present? and request.subdomain =~ /\Acompanies\z/
end
end
在本地,它运行得很好。我已经使用companys.lvh.me:3000进行了测试(正如同一个railscast建议的那样),它确实重定向到正确的登录页面。
为了尝试使其在 Heroku 上运行,我使用 herokudomains:addcompanys.mydomain.com
添加了域,并且在我的 DNS 服务器上添加了新的 CNAME 记录,指向我的 Heroku 应用程序。
但是,当我尝试访问companys.mydomain.com 时,它会将我重定向到根路径,而不是正确的登录页面。我有点不知道发生了什么。任何帮助将不胜感激。
最佳答案
当您的域的 tld 与 heroku 域的 tld 不同时,就会发生这种情况。
我的是 .com.br,我必须将 config.action_dispatch.tld_length = 2 添加到 production.rb,以便 Rails 可以正确解析 URL 并重定向到正确的子域。
关于ruby-on-rails-3 - 带有设备的子域路由在heroku上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16610877/