ruby-on-rails – 在nginx / passenger上部署rails 3.2.12应用程序(带引擎)到SUB URI时发现404 Not error

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

我们需要在ubuntu 12.04服务器上部署rails 3.2.12 app到sub uri nbhy. rails应用程序有3个引擎,其中一个是authentify,用于用户身份验证.主应用程序的根指向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上运行乘客和nginx.在同一台服务器上,还有另一个rails app在自己的子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处创建符号链接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是第一个部署到子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不会出现在正确的页面上,因为它缺少www和authentify之间的基础uri nbhy.根据我们的分析,authentify会话控制器中的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).

在没有子uri的情况下部署rails应用程序时工作正常.

为什么路线上缺少子uri?有没有办法让我们在这里留下并消除错误?感谢帮助.

解决方法:

很可能authentify引擎正在重定向到/ user_menus,而不是/ nbhy / authentify.这是您编写的自定义Rails或Sinatra应用程序吗?如果是这样,您需要更改/配置authentify代码以始终附加托管Rails应用程序的当前子目录.您可以通过在代码中说ENV [‘RAILS_RELATIVE_URL_ROOT’]来获得乘客的信息.

本文标题为:ruby-on-rails – 在nginx / passenger上部署rails 3.2.12应用程序(带引擎)到SUB URI时发现404 Not error