我可以让Rails / WEBrick将/ etc / hosts中的条目识别为子域(而不是域)吗?

时间:2014-08-19 16:54:28

标签: ruby-on-rails subdomain webrick

我尝试在本地使用子域名作为Rails应用,因此我将以下行添加到我的/etc/hosts文件中:

# add 'test' subdomain for localhost
127.0.0.1 test.localhost

现在我可以将浏览器指向test.localhost:3000并点击我的Rails应用程序。

然而,Rails或WEBrick将整个域名解释为域名:

# logging in the controller
logger.debug("domain: '#{request.domain}', subdomain: '#{request.subdomain}'")

# output in the console
domain: 'test.localhost', subdomain: ''

是否有一种简单的方法可以让WEBrick Rails将test解释为子域?

谢谢!

更新

我最终将before_action作为解决方法。

def set_domain_and_subdomain
  @domain = request.domain
  @subdomain = request.subdomain

  # HACK: force /etc/hosts subdomains
  if Rails.env.development?
    if m = request.domain.match(/([^\.]+).localhost/)
      @subdomain = m[1]
      @domain = 'localhost'
    end
  end
end

但我仍然很好奇是否有办法在我的计算机上普遍这样做(即在`/ etc / hosts或其他东西)

1 个答案:

答案 0 :(得分:5)

发现这篇文章已经很晚了,但对后人来说:https://github.com/rails/rails/issues/12438

设置顶级域名长度(TLD)允许request.subdomain按照您的预期定位子域名。

我将config.action_dispatch.tld_length = 0放入config/environments/development.rb,一切都顺利进行。

请记住重新启动服务器