gpt4 book ai didi

ruby-on-rails - 将 rails 3.2.12 应用程序(带引擎)部署到 nginx/passenger 上的 SUB URI 时出现 404 Not Found 错误

转载 作者:太空宇宙 更新时间:2023-11-03 16:52:32 26 4
gpt4 key购买 nike

我们需要将 rails 3.2.12 应用程序 部署到 ubuntu 12.04 服务器上的 sub uri nbhyrails 应用 有 3 个引擎,其中之一是用于用户身份验证的 authentify。主应用程序的根指向身份验证的登录页面。这是主应用程序中的 routes.rb:

  root :to => "authentify::sessions#new"
match '/signin', :to => 'authentify::sessions#new'
match '/signout', :to => 'authentify::sessions#destroy'
match '/user_menus', :to => 'user_menus#index'
match '/view_handler', :to => 'authentify::application#view_handler'

该应用程序部署到基础 uri nbhy,在 ubuntu 12.04 上运行,使用 passenger 和 nginx。在同一台服务器上,还有另一个 Rails 应用程序在其自己的子 uri 中运行。这是 nginx.conf 中 sub uri nbhy 的配置:

server {
listen 80;
server_name 6.95.225.93;
root /var/www/;
passenger_enabled on;
rails_env production;
passenger_base_uri /by;
passenger_base_uri /nbhy;

#for rails >=3.1, assets pipeline
location ~ ^/assets/ {
expires max;
add_header Cache-Control public;
add_header ETag "";
break;
}
}

还在 文档根目录 /var/www 中创建了一个 symlink nbhy 指向 /var/www/nbhyop/current/public.这是 root/var/www/ 的输出:

total 8
lrwxrwxrwx 1 cjadmin www-data 28 Nov 3 2012 by -> /var/www/byop/current/public
drwxrwsr-x 4 cjadmin www-data 4096 Nov 4 2012 byop
lrwxrwxrwx 1 cjadmin www-data 30 May 16 21:27 nbhy -> /var/www/nbhyop/current/public
drwxrwsr-x 4 cjadmin www-data 4096 May 14 15:21 nbhyop

by 是部署到 sub URI第一个 rails 应用程序,并且工作正常。

输入 http://6.95.225.93/nbhy 后显示登录页面。输入用户名和密码后,页面被重定向到 http://6.95.225.93/authentify/session 并出现 404 Not Found 错误。 nginx error.log 中发现错误:

2013/05/13 16:29:25 [error] 2384#0: *1 open() "/var/www/authentify/session" failed (2: No such file or directory), client: 192.168.1.1, server: 6.95.225.93, request: "POST /authentify/session HTTP/1.1", host: "6.95.225.93", referrer: "http://6.95.225.93/nbhy/"

显然 /var/www/authentify/session 不会命中正确的页面,因为它缺少 base uri nbhy 之间的 wwwauthentify。根据我们的分析,authentify session controller 中的 create 没有被命中,即使在 使用正确的用户名和密码,用户也没有通过身份验证http://6.95.225.93/nbhy

还发现用户可以在 http://6.95.225.93/nbhy/authentify/session/new登录,但需要一些改动。登录后,页面将重定向到 http://6.95.225.93/user_menus,这将抛出 404 Not Found 错误。然而,如果我们在中间插入 nbhy 作为:http://6.95.225.93/nbhy/user_menus,那么它将打开用户菜单页面 成功。对于任何进一步点击链接,手动插入 nbhy 将使链接有效(如果 nbhy 丢失)。

在没有 sub uri 的情况下部署时,rails 应用程序运行良好。

为什么路由中缺少子 uri?有没有办法让 nbhy 保留在这里并消除错误?感谢您的帮助。

最佳答案

很可能 authentify 引擎正在重定向到 /user_menus,而不是 /nbhy/authentify。这是您编写的自定义 Rails 或 Sinatra 应用程序吗?如果是这样,您需要更改/配置 authentify 的代码,以始终附加托管 Rails 应用程序的当前子目录。您可以通过在代码中输入 ENV['RAILS_RELATIVE_URL_ROOT'] 从 passenger 处获取。

关于ruby-on-rails - 将 rails 3.2.12 应用程序(带引擎)部署到 nginx/passenger 上的 SUB URI 时出现 404 Not Found 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16532188/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com