我不明白。我试图在apache反向代理后面运行一个Rails应用程序。我在端口8080上使用Unicorn。
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/,而不是每次重定向都明确提及它。
我尝试在config / environments / 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不考虑配置吗?
答案 0 :(得分:0)
看起来我已经有了解决方案。我不得不将apache配置更改为此
ProxyPass /foo/ http://localhost:8080/foo/
ProxyPassReverse /foo/ http://localhost:8080/foo/
和config.ru到此
if Rails.env.production?
map '/foo' do
run Rails.application
end
else
run Rails.application
end