Heroku, пользовательский поддомен и пользовательское ограничение - PullRequest
0 голосов
/ 19 января 2019

Мне кажется, что это должно сработать, основываясь на прочтении других вопросов, но пока ничего из того, что я обнаружил, так и не сделало. У меня есть приложение, которое позволяет клубным спортивным командам размещать веб-сайт (теоретически). Все хорошо работает на моем локальном компьютере при использовании lvh.me; Однако развертывание к героку нарушает маршрут.

Рубин на рельсах 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 работал), я перезапустил dynos.

Я думаю, это должно быть все, что мне нужно сделать.

Мой файл маршрутов довольно прост

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

Теперь при переходе к героку поддомен перенаправляет меня в корневой домен. И набрав pincity.mydomain.com/about, вы получите 404

Edit: Я добавил немного регистрации в маршрут ограничения команды. Вот немного из журнала.

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: Я обнаружил запись URL в DNSSimple, которая перенаправляла корневой домен на версию www. Я удалил это и добавил логику приложения для обработки этого перенаправления. Надеюсь, что это помогает.

1 Ответ

0 голосов
/ 20 января 2019

Я согласен, похоже, что перенаправление происходит до того, как запрос попадает в ваше приложение Rails, что означает, что это либо Heroku, либо что-то вроде до Heroku.У вас есть CDN перед вашим приложением Heroku?

Я мог видеть что-то вроде правила перенаправления Cloudflare , вызывающее такое поведение.Я особенно подозрительно отношусь к этому, потому что ваш корневой домен также перенаправляет на 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
...