ruby-on-rails-3 - 带有设备的子域路由在heroku上不起作用

标签 ruby-on-rails-3 heroku dns devise cname

我使用 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/

相关文章:

ruby-on-rails - Rails 不转换时区 (PostgreSQL)

node.js - Hubot-hipchat 可以进行 1-1 聊天,但不能在房间内聊天

php - 如何防止 CodeIgniters 打印 PHP 错误

linux - 在服务器中的哪里可以找到请求是对网站的 DNS 还是端口上的服务器 IP 发出的

django - heroku 应用程序域有效,但自定义域给出 400 错误

javascript - 在 Ruby/Javascript 中设置按钮的 href

ruby-on-rails-3 - Phusion Passenger + 带 Rails 3 的 NGinx

ruby-on-rails - 如何使用 YouTube SUP API 检索某些预定义用户最近上传的内容?

ruby-on-rails - heroku 上的 Assets 管道 : how to manage 2 environments?

html - 强制我的网络浏览器在新选项卡上打开链接