繁体   English   中英

将rails 3.2.12 app(带引擎)部署到nginx / passenger上的SUB URI时出现404 Not Found错误

[英]404 Not Found error in deploying rails 3.2.12 app (with engines) to SUB URI on nginx/passenger

我们需要在ubuntu 12.04服务器上部署rails 3.2.12 appsub uri nbhy rails app有3个engines ,其中一个是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 nbhyubuntu 12.04上运行passenger and 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;
   }
}

此外,在document root /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是第first部署到sub URI rails应用程序,运行正常。

输入http://6.95.225.93/nbhy后会显示login page 键入用户和密码后,页面被重定向到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不会出现在正确的页面上,因为它缺少wwwauthentify之间的base uri nbhy 根据我们的分析, authentify session controllercreate未被命中,即使使用正确的用户名和密码,用户也未经过身份验证, http://6.95.225.93/nbhyhttp://6.95.225.93/nbhy

另请注意,用户可以通过http://6.95.225.93/nbhy/authentify/session/new login 登录后,页面将被重定向到http://6.95.225.93/user_menus ,这将导致404 Not Found错误。 但是如果我们在之间插入nbhyhttp://6.95.225.93/nbhy/user_menusnbhy ,那么它将成功打开user menus page 对于任何进一步点击链接,手动插入nbhy将使链接工作(如果缺少nbhy )。

在没有sub uri情况下部署rails应用程序时工作正常。

为什么路线上缺少子uri? 有没有一种方法,我们可以使nbhy这里留下来,消除错误? 感谢帮助。

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

Rails直接从http://6.95.225.93而不是http://6.95.225.93/nbhy生成路径。

您可能需要将所有路由范围限定为“/ nbhy”。

配置/ routes.rb中

scope "/nbhy" do
  ...
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM