RoR3 перенаправляет не включая RAILS_RELATIVE_URL_ROOT - PullRequest
4 голосов
/ 04 февраля 2011

На моем общедоступном сервере Apache2 доступ к моему приложению Rails 3 осуществляется через подчиненный URI, например

https://www.myserver.com/myapp/controller...

этот сервер настроен для обратного прокси-сервера на другой сервер Apache2, на котором размещено приложение Rails через Passenger:

http://intranet.server.com/myapp

В моих настройках VirtualHost для сервера интрасети у меня есть

SetEnv RAILS_RELATIVE_URL_ROOT "/myapp"

В моем файле config / environment / production.rb я раскомментировал строку

config.log_level = :debug

Таким образом, самый первый метод выполнения в моем приложении выдает:

logger.debug { "The environment variable RAILS_RELATIVE_URL_ROOT is presently #{ENV['RAILS_RELATIVE_URL_ROOT']}" }

и, конечно же, в файле журнала производства вы видите:

The environment variable RAILS_RELATIVE_URL_ROOT is presently /myapp

Тем не менее, следующая строка в журнале, что, очевидно, то, что браузер идет:

Redirected to https://www.myserver.com/controller/action

Я узнал об этой переменной среды здесь, в Stackoverflow, так что это один человек, для которого он работал, но один другой сказал, что не сделал этого, а другой сказал, что сделал. Итак, с моим опытом, мы сейчас в галстуке. Я что-то упустил?

Ответы [ 4 ]

1 голос
/ 03 июля 2013

Ух, спасибо большое, я наконец понял это.

кажется, что нам нужно сделать прокси с точным относительным URL на рельсах назначения :, совпадающий URI на Apache.

eg: http://localhost/example/ to http://localhost:3000/example/

этот пример ниже был протестирован на Rails 4:

поэтому в прокси httpd.conf:

ProxyRequests Off
ProxyPreserveHost On

Заказ отказать, разрешить
Разрешить из всех

ProxyPass / пример http: // localhost: 3000 / пример

ProxyPassReverse / пример http: // localhost: 3000 / пример

Далее, в рельсах config.ru:

require :: File.expand_path ('../ config / environment', FILE )
#run Rails.application
карта ActionController :: Base.config.relative_url_root do
run Examplerails :: Приложение
конец

map "/" do
запустите Examplerails :: Application
конец

Наконец, в config / application.rb

модуль Пример рельсов
Класс Application config.action_controller.relative_url_root = "/ пример "
конец
конец

Пожалуйста, обратите внимание на трейлинг / .
У некоторых есть косая черта, в то время как другим это не нужно.
Также удалите некоторый интервал между тегом и URL в этом коде выше,
я пытаюсь отформатировать его для отображения здесь.

1 голос
/ 04 февраля 2011

Насколько я знаю, возможность использовать переменную ENV была изменена довольно давно:

https://rails.lighthouseapp.com/projects/8994/tickets/1946-setting-a-relative-root-url-via-a-web-server-not-possible-anymore

То есть в environment.rb (или инициализаторе)Вы можете установить config.action_controller.relative_url_root = ENV ['RAILS_RELATIVE_URL_ROOT']

0 голосов
/ 06 августа 2015

Я нашел эту тему на Rails Github полезной: https://github.com/rails/rails/issues/5122

В итоге я сделал следующее в config / route (я настроил relative_url_root через переменную среды RAILS_RELATIVE_URL_ROOT):

Rails.application.routes.draw do |*args|
  scope Rails.application.config.relative_url_root || "/" do
    ...
  end
end
0 голосов
/ 04 февраля 2011

Я разобрался в своей ошибке. Настройки обратного прокси на внешнем сервере ссылались только на имя хоста внутреннего сервера и не указывали путь к моему приложению RoR3.

...