Heroku, пользовательский поддомен и пользовательское ограничение

63
2

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

Рубин на рельсах 5.1

Шаги, которые я предпринял до сих пор:

Добавлен поддомен в домены герои. Для приложения heroku теперь у меня есть корневой домен в качестве ALIAS или ANAME, www в качестве cname и недавно добавленный поддомен (pincity) в качестве cname.

Добавил имя в мой провайдер DNS. Использование dig возвращает, что поддомен возвращает правильный адрес {crazy-heroku-name}.herokudns.com

После развертывания и добавления этой команды в базу данных производственного приложения (фрагмент "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

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

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

спросил(а) 2021-01-19T17:04:08+03:00 6 месяцев назад
1
Решение
128

Я согласен, кажется, что перенаправление происходит до того, как запрос попадает в ваше 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

ответил(а) 2021-01-19T17:04:08+03:00 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема