Приложение Rails 4 должно быть доступно через архаичный портал. Этот портал работает, добавляя (с точки зрения браузера) префикс к каждому URL-адресу; этот префикс удаляется порталом перед отправкой запроса в мое приложение.Добавить префикс к сгенерированным ссылкам, но не к входящим маршрутам
Таким образом, браузер вызывает https://portal.company.com/portal/prefix/xyzzy/myapp/mymodel/new
; портал делает свою вещь и просит https://myserver.company.com/myapp/mymodel/new
(прохождение по разделительному префиксу каким-то неуместным образом). Префикс является динамическим и может меняться между запросами.
Проблема в том, что портал не может переписать HTML-страницы, обслуживаемые моим приложением. То есть, он не помещается в префикс. Он ожидает, что приложения будут либо излучать относительные URL-адреса, либо добавить сам префикс портала.
Итак:
- регулярный URL
/myapp/mymodel/new
, например, должен остаться как когда приложение прямой доступ (для некоторых пользователей, которые не используют портал). - При доступе к порталу наше приложение должно по-прежнему понимать
/myapp/mymodel/new
, как обычно, но при использованииmymodel_new_path
илиlink_to @mymodel
илиform_for @my_model
или любых других магических URL-генераторов есть, он должен добавить префикс портала. Таким образом, любой URL, испускаемый приложением, должен выглядеть как/portal/prefix/xyzzy/myapp/mymodel/new
, где строка запроса для запроса/portal/prefix/xyzzy
задается определенным нами методом (а частьxyzzy
может меняться между запросами).
Как я могу это достичь? Мои routes.rb
выглядит как это сегодня:
MyApp::application.routes.draw do
scope ' /myapp' do
get ...
Это, вероятно, должно остаться как есть, потому что URL-адрес в входящих запросов не изменяется при выходе из портала. Но как влиять на исходящие URL?
вы можете написать простые промежуточное программное обеспечение, добавляемый префикс для всех относительных путей, если запрос пришел от портала –
@ArkadiuszOleksy, вы имеете в виду, что бы сделать что-то вдоль линий 'html.gsub! (/ Myurlroot /«portalprefix/myurlroot «Да, у меня была эта идея, она должна быть достаточно простой, но вроде бы надеялась решить проблему в корне проблемы без такой перезаписи. Я буду иметь в виду, если ничего не придумает. – AnoE