Rails + Heroku + Cloudflare - 消除www作为子域

时间:2015-06-09 15:39:18

标签: ruby-on-rails heroku cloudflare

我有一个多租户Rails 4应用程序,它使用带有PostgreSQL模式的子域来“租用”应用程序。我在Heroku和Cloudflare中设置了子域通配符“*”并加载了网站,但它仍然“认为”www是一个有效的子域。因此,通常有效的链接(在开发中工作)在生产中不起作用,因为www.mysite.com/accounts/new等与asdf.mysite.com/accounts/new相同。有什么方法可以让我的应用程序几乎忽略www作为子域?我仍然希望mysite.com重新定向到www.mysite.com,但是当它是www时,只是将子域设置为false?

为了使事情更具体一点,在我的application_controller中,我有一些代码可以执行以下操作。注意评论。在开发模式下,redirect_to root_url(subdomain:false)可以工作,但在生产中,它只是无限重定向并且不会加载。为了加载它,我只是渲染页面,但这样做永远不会将子域设置为false。

  def load_schema
    Apartment::Tenant.switch!('public')
    return unless request.subdomain.present?
    if current_account
      Apartment::Tenant.switch!(current_account.subdomain)
    else
      redirect_to root_url(subdomain: false) # Works locally, but infinite re-direct in production
      #render 'welcome/index' # - Renders the page in production, but nothing else works.
    end
  end

基本上,一切都在开发模式下按预期工作,但在生产中,似乎有一些需要解决的DNS问题,但我似乎无法弄清楚要做什么。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我必须删除CloudFlare中的A名称记录,并将其替换为CNAME记录。我还添加了2个额外的CNAME记录:一个通配符和一个用于www。

答案 1 :(得分:0)

我的建议是强行www.mysite.com重定向到你可能拥有主站点的mysite.com。

您可以使用将主机名指向重定向服务,或使用routes.rb文件中具有约束的特定路由来完成此操作。