2013-05-13 54 views
4

我們需要在ubuntu 12.04服務器上部署rails 3.2.12 appsub uri nbhyrails 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 nginxubuntu 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; 
    } 
} 

另外一個symlinknbhydocument 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 URIfirst軌道並正常工作。

輸入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/" 

很明顯,因爲它缺少wwwauthentify之間的base urinbhy/var/www/authentify/session不會打右頁。根據我們的分析,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丟失)。

部署時沒有使用sub uri,Rails應用工作正常。

爲什麼sub uri從路由中丟失?有沒有辦法讓nbhy在這裏停留並消除錯誤?感謝幫助。

回答

2

最有可能authentify引擎做一個重定向到/user_menus,而不是/nbhy/authentify。這是你寫的定製的Rails或Sinatra應用程序嗎?如果是這樣,您需要更改/配置authentify的代碼,以始終附加託管Rails應用程序的當前子目錄。您可以通過在您的代碼中說ENV['RAILS_RELATIVE_URL_ROOT']從乘客那裏獲得。

+0

redirect_to'/ user_menus'。你是對的。用戶獲得授權後,驗證將重定向到/ user_menus,如上所述。我們可以這樣做:redirect_to ENV ['RAILS_RELATIVE_URL_ROOT'] +'/ user_menus'?開發線上方是否行? – user938363 2013-05-20 04:00:03

+0

我們也需要把這個相對的url根目錄放在應用程序的每個重定向中嗎?我們仍然不明白爲什麼最後2次部署到sub uri工作正常(只需在nginx.conf和symlink中配置上面的配置),並且這個引擎變得如此困難。 – user938363 2013-05-20 04:22:29

+0

不幸的是,你需要使用ENV ['RAILS_RELATIVE_URL_ROOT'] +'/ user/menus''。如果您使用的是Rails路徑助手(比如'user_path','login_path'等),那麼您沒有問題,它們會自動附加相對URL根目錄。但是,如果你正在做自己的重定向到自定義路徑,那麼你需要自己做。 – Subhas 2013-05-20 12:48:28

1

軌道直接從http://6.95.225.93生成路徑而不是http://6.95.225.93/nbhy

您可能需要將所有路線的範圍限定爲「/ nbhy」。

config/routes。RB

scope "/nbhy" do 
    ... 
end 
+0

將再次嘗試範圍。我們是否也需要保持nginx和symlink中的當前配置? – user938363 2013-05-17 14:15:06

+0

是的,你需要兩個。 – depa 2013-05-17 14:32:38

+0

另一個關於routes.rb中的範圍的問題:如何處理沒有nbhy的開發路線?我們可以做範圍「/ nbhy」|| 「/」呢? – user938363 2013-05-17 14:56:21

相關問題