2

我已经使用设计定义了几种类型的用户(成员、company_users 等),并且我想为每种类型的用户的登录页面使用不同的子域。

为了实现子域的匹配并重定向到适当的操作,我参考了这个 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

在本地,它完美运行。我已经使用 company.lvh.me:3000 进行了测试(正如相同的 railscast 建议的那样),它确实重定向到正确的登录页面。

为了尝试让它在 Heroku 上运行,我添加了域,使用heroku domains:add companies.mydomain.com,并在我的 DNS 服务器上添加了一条新的 CNAME 记录,指向我的 Heroku 应用程序。

但是,当我尝试访问 company.mydomain.com 时,它会将我重定向到根路径,而不是正确的登录页面。我有点不知道发生了什么。任何帮助将不胜感激。

4

1 回答 1

3

当您的域的 tld 与 heroku 域的 tld 不同时,就会发生这种情况。

我的是 .com.br,我必须将 config.action_dispatch.tld_length = 2 添加到 production.rb,这样 Rails 才能正确解析 URL 并重定向到正确的子域。

于 2013-10-14T18:48:04.843 回答