Heroku,自定义子域和自定义约束

时间:2019-01-18 22:50:48

标签: ruby-on-rails ruby heroku routing subdomain

根据我对其他问题的阅读,我认为这应该起作用,但是到目前为止,我发现还没有任何结果。我有一个应用程序,可以让俱乐部运动队托管一个网站(理论上)。使用lvh.me时,在我的本地机器上一切正常;但是部署到heroku会中断路由。

Ruby on Rails 5.1

到目前为止我已经采取的步骤:

  1. 已将子域添加到heroku域。对于heroku应用程序,我现在将根域作为ALIAS或ANAME,将www作为一个cname,并将新添加的子域(pincity)作为一个cname。

  2. 将cname添加到了我的dns提供程序。使用dig会返回该子域正在返回正确的{crazy-heroku-name} .herokudns.com地址

  3. 在将该团队部署并添加到生产应用数据库(“ pincity”的标记,以便pincity.mydomain.com可以正常工作)之后,我重新启动了测功机。

我认为这应该是我所要做的。

我的路线文件非常简单

class TeamWebsiteConstraint
  def matches?(request)
    Rails.logger.info "subdomain is #{request.subdomain}"
    Team.where(slug: request.subdomain).any?
  end
end

Rails.application.routes.draw do
  # all other routes

  # Club team custom websites
  constraints TeamWebsiteConstraint.new do
    root 'team_website#home', as: :team_website_root
    get 'about', to: 'team_website#about', as: :team_website_about
    get 'schedule', to: 'team_website#schedule', as: :team_website_schedule
    get 'faqs', to: 'team_website#resources', as: :team_website_resources
    get 'contact', to: 'team_website#contact', as: :team_website_contact
  end

  root 'marketing#home'
end

现在,当进入heroku时,子域会将我重定向到根域。并输入pincity.mydomain.com/about会产生404

编辑: 我在teamconstraint路线中添加了一些日志记录。这是日志的一部分。

at=info method=GET path="/about" host=pincity.wrestlingiq.com request_id=b004b8cc-08e4-4bc9-a87a-d4b37deaa29c fwd="71.202.0.175" dyno=web.1 connect=1ms service=4ms status=301 bytes=391 protocol=https 
subdomain is www

似乎heroku路由器在处理路由代码之前正在执行301重定向,这意味着子域约束永远不会触发。

编辑2: 我在DNSSimple中发现了一个URL记录,该记录将根域重定向到www版本。我已经删除了它,并添加了应用逻辑来处理该重定向。希望能有所帮助。

1 个答案:

答案 0 :(得分:0)

我同意,在请求到达您的Rails应用之前,似乎正在发生重定向,这意味着它是Heroku或之前的东西。您的Heroku应用程序前面有CDN吗?

我可能会看到类似Cloudflare redirect page rule的情况导致此现象。我对此特别怀疑,因为您的根域也重定向到www

❯ curl -I https://wrestlingiq.com      
HTTP/1.1 301 Moved Permanently
Server: Cowboy
Date: Sun, 20 Jan 2019 14:20:54 GMT
Connection: keep-alive
Cache-Control: max-age=3600
Content-Type: text/html
Location: https://www.wrestlingiq.com/
Content-Length: 215
Via: 1.1 vegur