Мне кажется, что это должно сработать, основываясь на прочтении других вопросов, но пока ничего из того, что я обнаружил, так и не сделало. У меня есть приложение, которое позволяет клубным спортивным командам размещать веб-сайт (теоретически). Все хорошо работает на моем локальном компьютере при использовании lvh.me; Однако развертывание к героку нарушает маршрут.
Рубин на рельсах 5.1
Шаги, которые я предпринял до сих пор:
Добавлен поддомен для доменов heroku. Для приложения heroku у меня теперь есть корневой домен как ALIAS или ANAME, www как cname и недавно добавленный поддомен (pincity) как cname.
Добавлен 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
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. Я удалил это и добавил логику приложения для обработки этого перенаправления. Надеюсь, что это помогает.