Настройка
Наше текущее приложение Rails составлено из под-приложений, которые монтируются в качестве двигателей. Обычно эти двигатели монтируются на субдомене в главном файле routes.rb
следующим образом
mount MySubApp::Engine => '/', as: :sub_app, constraints: {subdomain: 'sub_app'}
Проблема
Маршруты в MySubApp
routes.rb
файле не получают поддомен при использовании названных _url
помощников. Например, следующее в apps/my_sub_app/config/routes.rb
MySubApp::Engine.routes.draw do
resources :foos
end
дает sub_app.foo_url(5)
, но это приводит к
Http:// WWW.example.com/Foos/5
когда мы хотим
Http:// sub_app.example.com/Foos/5
TL;DR
Как я могу получить ограничения монтирования двигателя, переданные его именованным маршрутам?
РЕДАКТИРОВАТЬ: Временное решение
Пока я предпочитаю лучшее решение, будет работать следующее. Вы можете обернуть все маршруты в каждом из файлов приложений routes.rb
, которые могут быть установлены на подобъекте подобным образом
MySubApp::Engine.routes.draw do
constraints Rails.application.routes.named_routes[:sub_app].constraints do
resources :foos
end
end
РЕДАКТИРОВАТЬ 2: Менее желательное обходное решение
Комментарий (после удаления?) указал, что вы можете передать опцию subdomain
для помощников, но нам бы хотелось избежать использования sub_app.foo_url(5, {subdomain: 'sub_app'})
для каждой кросс-субдоменной ссылки. Даже если мы переместили имя поддомена в ENV var и сделали обертку, это не СУХОЙ.