You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails应用在Nginx+Passenger部署下子URI路径重复问题排查

解决Rails+Passenger+Nginx部署路径重复问题

问题根源

表单提交时URL出现/my-app/view/my-app/view/重复,是因为Rails未感知自身运行在/my-app/view子路径下,生成的路由URL未包含Passenger的基础URI前缀,而Nginx代理配置又叠加了该前缀,最终导致路径重复。

解决方案

方案1:配置Rails相对URL根(推荐)

修改Rails应用的环境配置文件(生产环境对应config/environments/production.rb,开发环境对应config/environments/development.rb),添加以下配置:

config.action_controller.relative_url_root = '/my-app/view'

重启Passenger应用后,Rails生成的所有路由(包括表单提交路径)都会自动带上/my-app/view前缀,与Nginx代理配置匹配,不会再出现重复。

方案2:修改表单路径生成逻辑

若不想修改全局配置,可直接在表单模板中指定正确路径:

=form_tag( explore_new_path, {method: :get, enforce_utf8: false, only_path: false} ) do

注:explore_new_path是Rails路由自动生成的路径辅助方法,若旧版本Rails不支持,也可手动拼接路径(不推荐,硬编码不利于维护):

=form_tag( '/my-app/view/explore/new', {method: :get, enforce_utf8: false} ) do

验证Nginx配置

当前Nginx配置逻辑正确,只需确认passenger_base_uri值与部署路径一致即可:

location ~ ^/my-app/view(/.*|$) {
    alias /var/www/html/code/public$1;

    passenger_base_uri /my-app/view;
    passenger_app_root /var/www/html/code;
    passenger_document_root /var/www/html/code/public;
    passenger_enabled on;
}

内容的提问来源于stack exchange,提问作者Mark Small

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 05:12:30