在Phusion Passenger中,nginx虚拟主机配置中使用了特定的指令,这些指令允许将Rails应用托管在子URL上。这在Phusion乘客文档中进行了描述。
对于Puma,我正在使用套接字。我的nginx配置包括:
upstream subapp {
server unix:<path_to_subapp_folder>/shared/sockets/puma.sock fail_timeout=0;
}
server {
...
location /subapp {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://subapp;
}
}
子应用程序将GET接收为“ / subapp”,但当然不知道该如何处理。如果我使用URL重写并在'/ subapp'之后的URL中传递所有内容,它将呈现页面,但是所有链接(包括资产路径)均不包含'/ subapp',因此是无效的。
一个如何配置Rails以便它在路径前添加“ / subapp”?我确实设法在route.rb中使用了一个范围(scope(:path =>(is_dev??'':'/ subapp'))),但这似乎是人为的,并且它并不位于资产路径的前面。我想有一种方法可以配置nginx / Puma(与Passenger一样)来应对这种情况。
该解决方案需要对config.ru进行以下更改:
if ENV['RAILS_ENV'] != 'production'
run SubApp::Application
else
# production
map '/subapp' do
run SubApp::Application
end
end
说明了此问题,并要求:
config.action_controller.relative_url_root = '/subapp'
无需其他Rails配置(例如,在生产中确定到“ / subapp”的路由)。如上所述的nginx配置有效。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句