#ruby-on-rails #ruby-on-rails-3 #routing #domain-driven-design #routes
#ruby-on-rails #ruby-on-rails-3 #маршруты #дизайн, управляемый доменом
Вопрос:
У меня возникли некоторые не очень простые проблемы с проектированием маршрутизации в rails 3.
У нас есть веб-сайт, переведенный на несколько языков. Некоторые из этих языков имеют полную поддержку домена, например :
example.com -> english
example.es -> spanish
example.fr -> french
exemple.de -> german
... (lot more)
Но у нас также :
example.com/zh-hans -> chinese
example.com/ru -> russian
... (lot more)
Я знаком с функцией ограничений (для совпадений? с request.host) но у меня много проблем с выяснением того, как сделать так, чтобы система маршрутизации хорошо работала с URL обоих типов.
Все сломалось, как только у нас появилось два разных типа запросов :
host:example.es path:/everything-else
host:example.com path:/LANG/everything-else
Единственное решение, которое я нашел, — это перехватывать все маршруты match '*' => 'website#routing'
и исправлять все вспомогательные пути, но я думаю, что это не лучший вариант для поддержки приложения в будущем.
Есть решения?
Ответ №1:
Я бы посоветовал настроить ваши маршруты так, чтобы они последовательно отображали все в path / LANG / …, а затем использовать ваш веб-сервер для перезаписи URL-адресов для доменов, зависящих от языка. Так, например, с Apache вы могли бы использовать что-то вроде этого:
RewriteEngine On
RewriteCond %{SERVER_NAME} example.de
RewriteCond %{REQUEST_URI} !^/de
RewriteRule ^.*$ http://%{SERVER_NAME}/de%{REQUEST_URI} [R]
RewriteCond %{SERVER_NAME} example.es
RewriteCond %{REQUEST_URI} !^/es
RewriteRule ^.*$ http://%{SERVER_NAME}/es%{REQUEST_URI} [R]
# etc.
(Я не уверен, что RewriteCond на самом деле правильный — предполагается, что «каждый путь запроса, который не начинается с ‘/ de’, ‘ / es’ и т.д.)
Комментарии:
1. Кажется отличным, я понимаю, что вы имеете в виду, это хорошая идея! Теперь мне интересно, как справиться с Rails url_helper, не нарушая путь? И еще, знаете ли вы способ сделать это непосредственно в Rails (в основном для доступа к нашей модели домена)?
2. Проверьте guides.rubyonrails.org /…
3. Хорошо, я понимаю.. Есть ли какие-либо отзывы об обслуживании rails за такими переписанными URL-адресами, как этот?