Раствор 1
Я думаю, что если вам нужна магия перезаписи HTTP, вам нужно переключиться с использования ajp и использовать прокси-сервер http, это исправляет пару угловых случаев при прокси между разными путями, он переписывает заголовки http, я не уверен, что прокси это делает ajp. Я бы просто попытался использовать приложение rails как ROOT.war или на виртуальном хосте или что-то на сервере tomcat, чтобы минимизировать источник ошибок при перенаправлении папки в качестве пользователя root. Всегда есть что-то, что не работает или нуждается в корректировке. Порты и локальные доменные имена дешевы.
Добавьте это в файл конфигурации вашей производственной среды:
config.action_controller.relative_url_root = '/app'
подробнее @ Чем заменить ActionController :: Base.relative_url_root?
Решение 2:
Если вы хотите, вы можете сбросить входящие пути в приложении rails с помощью небольшого промежуточного программного обеспечения стойки. Таким образом, приложение rails не будет ничего знать о том, что он не обслуживается в корневом пути. Вы также можете добавить config.serve_static_assets = true, чтобы рельсы обслуживали статические ресурсы в производственном режиме.
# application.rb
require "proxy_path_reset_filter"
config.middleware.use "ProxyPathResetFilter"
config.action_controller.relative_url_root = '/'
извиняюсь за ввод этой руки, но она должна работать.
# proxy_path_reset_filter.rb
class ProxyPathResetFilter
def initialize(app)
@app = app
end
def call(env)
# some servers use REQUEST_URI and some use PATH_INFO for routing use both
if (env['REQUEST_URI'] || env['PATH_INFO']) =~ /^\/app\//
env.update({
'REQUEST_URI' => env['REQUEST_URI'].gsub(/^\/app\//, '/')),
'PATH_INFO' => env['PATH_INFO'].gsub(/^\/app\//, '/')) })
end
@app.call(env)
end
end