Я не понимаю. Я попытался запустить приложение Rails за обратным прокси-сервером apache. Я использую Единорог на порт 8080.Rails в подкаталоге за обратным прокси Apache
bundle exec unicorn -c config/unicorn.rb -E production -p 8080
Apache VirtualHost
ProxyPass /foo/ http://localhost:8080/
ProxyPassReverse /foo/ http://localhost:8080/
Это в основном работает. Запрос на http://domain.tld/foo/ поступает в приложение Rails. Ниже редирект на механизм аутентификации с помощью следующей в ApplicationController.before_filter
:
redirect_to controller: 'sessions', action: 'index'
Как и следовало ожидать, я перенаправлен на http://domain.tld/sessions/. Теперь я хочу настроить Rails для перенаправления на http://domain.tld/foo/sessions/ глобально, без явного упоминания его при каждом перенаправлении.
Я попытался использовать это в конфиге/сред/production.rb:
config.relative_url_root = '/foo'
config.action_controller.relative_url_root = '/foo'
И начиная Единорог с этим:
RAILS_RELATIVE_URL_ROOT='/foo' bundle exec unicorn -c config/unicorn.rb -E production -p 8080
К сожалению, это не работает. Это вообще не изменяет поведение. Я добавил вывод отладки перед перенаправлением, чтобы увидеть, что происходит.
puts Rails.application.config.relative_url_root
puts ENV['RAILS_RELATIVE_URL_ROOT']
puts url_for controller: 'sessions', action: 'index'
Это печатает:
/foo
/foo
http://domain.tld/sessions
Может кто-нибудь сказать мне, почему Rails не принимает конфигурацию во внимание?