我們需要在ubuntu 12.04
服務器上部署rails 3.2.12 app
到sub uri nbhy
。 rails app
有3 engines
,其中一個是用於用戶認證的authentify
。主應用程序的根指向驗證的登錄頁面。這裏是主要的應用程序的routes.rb中:404未找到部署導軌的錯誤3.2.12應用程序(帶引擎)到nginx/passenger上的SUB URI
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'
的應用程序部署到與passenger and nginx
上ubuntu 12.04
運行基本URI nbhy
。在同一臺服務器上,還有另一個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;
}
}
另外一個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
是應用程序部署到sub URI
的first
軌道並正常工作。
輸入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/"
很明顯,因爲它缺少www
和authentify
之間的base uri
nbhy
/var/www/authentify/session
不會打右頁。根據我們的分析,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
丟失)。
部署時沒有使用sub uri
,Rails應用工作正常。
爲什麼sub uri從路由中丟失?有沒有辦法讓nbhy
在這裏停留並消除錯誤?感謝幫助。
redirect_to'/ user_menus'。你是對的。用戶獲得授權後,驗證將重定向到/ user_menus,如上所述。我們可以這樣做:redirect_to ENV ['RAILS_RELATIVE_URL_ROOT'] +'/ user_menus'?開發線上方是否行? – user938363 2013-05-20 04:00:03
我們也需要把這個相對的url根目錄放在應用程序的每個重定向中嗎?我們仍然不明白爲什麼最後2次部署到sub uri工作正常(只需在nginx.conf和symlink中配置上面的配置),並且這個引擎變得如此困難。 – user938363 2013-05-20 04:22:29
不幸的是,你需要使用ENV ['RAILS_RELATIVE_URL_ROOT'] +'/ user/menus''。如果您使用的是Rails路徑助手(比如'user_path','login_path'等),那麼您沒有問題,它們會自動附加相對URL根目錄。但是,如果你正在做自己的重定向到自定義路徑,那麼你需要自己做。 – Subhas 2013-05-20 12:48:28