【发布时间】:2013-05-08 02:02:47
【问题描述】:
我们需要在ubuntu 12.04 服务器上部署rails 3.2.12 app 到sub 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 nbhy,在 ubuntu 12.04 和 passenger and 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;
}
}
还在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 是部署到 sub URI 的 first rails 应用程序,并且运行良好。
在输入http://6.95.225.93/nbhy 后会显示login page。输入用户名和密码后,页面被重定向到http://6.95.225.93/authentify/session,出现404 Not Found 错误。在nginxerror.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 之间的base uri nbhy。根据我们的分析,authentify session controller 中的create 没有被命中,即使http://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 错误。但是,如果我们在两者之间插入nbhy 为:http://6.95.225.93/nbhy/user_menus,那么它将成功调出user menus page。对于任何进一步点击链接,手动插入nbhy 将使链接工作(如果nbhy 缺失)。
在没有sub uri 的情况下部署时,rails 应用运行良好。
为什么路由中缺少 sub uri?有没有办法让nbhy 留在此处并消除错误?感谢您的帮助。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 ubuntu nginx passenger