404 Not Found错误在nginx的/乘客部署导轨3.2.12应用(与发动机)至SUB UR

2019-09-03 00:07发布

我们需要部署rails 3.2.12 appsub uri nbhy一上ubuntu 12.04服务器。 在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 nbhy上运行ubuntu 12.04passenger and nginx 。 在同一台服务器,有其自己的子URI运行的另一个Rails应用程序。 这里是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;
   }
}

另外一个symlink nbhy在创建document root /var/www指向/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

byfirst应用程序部署到轨sub URI和工作正常。

login page输入后显示http://6.95.225.93/nbhy 。 在用户名和密码键后,页面重定向到http://6.95.225.93/authentify/session404 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 。 根据我们的分析, createauthentify session controller还没有被击中,用户尚未即使在正确的用户名和密码来验证http://6.95.225.93/nbhy

还发现,用户可以loginhttp://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 ,那么它会弹出user menus page成功。 对于任何进一步点击链接,手动插入nbhy将使链接工作(如果nbhy丢失)。

Rails应用程序,而无需部署时工作得很好sub uri

为什么子URI是从路线不见了? 有没有一种方法,我们可以使nbhy这里留下来,消除错误? 感谢帮助。

Answer 1:

最有可能的authentify引擎做一个重定向到/user_menus代替, /nbhy/authentify 。 这是一个自定义的Rails或Sinatra的应用程序,你写的吗? 如果是这样,您需要更改/配置的代码authentify在其下的Rails应用程序托管当前子目录总是追加。 你可以这样得到来自乘客ENV['RAILS_RELATIVE_URL_ROOT']在你的代码。



Answer 2:

轨道被直接从生成路径http://6.95.225.93代替http://6.95.225.93/nbhy

你可能需要范围的所有路由,以“/ nbhy”。

配置/ routes.rb中

scope "/nbhy" do
  ...
end


文章来源: 404 Not Found error in deploying rails 3.2.12 app (with engines) to SUB URI on nginx/passenger