子域上的Rails,设计和动态子域(例如user.beta.example.com)如何设置?

时间:2014-07-14 21:46:18

标签: ruby-on-rails ruby-on-rails-3 devise subdomain passenger

我使用的是basecamp风格的子域名,rails 3.2,设计2,乘客独立。 * .example.com上的一切正常。现在我想在* .beta.example.com上启动一个临时环境,但不确定最好的方法是什么。

以下方法检查用户是否请求app.example.com(然后他被重定向到登录页面)或某人的帐户(例如user1.example.com),否则返回badrequest。 (app_subdomain =' app')

def validate_subdomain
  if request.subdomain == Settings.app_subdomain
    redirect_to(user_signed_in? ? users_accounts_path : new_user_registration_path)
  else
    head :bad_request unless current_account?
  end
end

如果我将其部署到* .beta.example.com,则request.subdomain返回" app.beta"和验证不再有效。

最优雅,最可重复的解决方法是什么?除了手动剥离环境的子域名。感谢

1 个答案:

答案 0 :(得分:1)

选项一:将request.subdomain更改为request.subdomains.first。然后,只会识别app中的app.bla-bla-bla.anything.example.com

选项二:在config / environments / production.rb中设置config.action_dispatch.tld_length。设置应用程序的TLD(顶级域)长度。默认为1.

tld_length上的来源:

  1. Rails 3.x TLD length
  2. http://guides.rubyonrails.org/configuring.html
  3. https://rails.lighthouseapp.com/projects/8994/tickets/5215-configurable-tld_length-for-subdomains