我们需要在rails 3.2.12 app
服务器上部署sub 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'
该应用已部署到nbhy
上ubuntu 12.04
的{{1}}基础上。passenger and nginx
。在同一台服务器上,还有另一个rails app在自己的子uri中运行。以下是sub uri nbhy
的nginx.conf中的配置:
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
by
是部署到first
的{{1}} rails应用,运行正常。
输入sub URI
后会显示login page
。在输入用户名和密码后,该页面被重定向到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
www
。根据我们的分析,authentify
中的create
未被点击,即使用authentify session controller
上的正确用户名和密码,用户也未经过身份验证。
另请注意,用户可以在http://6.95.225.93/nbhy
处login
进行一些扭曲。登录后,该页面将被重定向到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
。对于任何进一步点击链接,手动插入user menus page
将使链接起作用(如果缺少nbhy
)。
在没有nbhy
的情况下部署rails应用程序时工作正常。
为什么路线上缺少子uri?有没有办法让sub uri
留在这里并消除错误?谢谢你的帮助。
答案 0 :(得分:2)
authentify
引擎最有可能重定向到/user_menus
,而不是/nbhy/authentify
。这是您编写的自定义Rails或Sinatra应用程序吗?如果是这样,您需要更改/配置authentify
的代码以始终附加托管Rails应用程序的当前子目录。您可以通过在代码中说ENV['RAILS_RELATIVE_URL_ROOT']
来获取乘客的信息。
答案 1 :(得分:1)
Rails直接从http://6.95.225.93
而不是http://6.95.225.93/nbhy
生成路径。
您可能需要将所有路线范围限定为“/ nbhy”。
<强>配置/ routes.rb中强>
scope "/nbhy" do
...
end