2013-05-17 53 views
5

我有一個運行在nginx 1.2.0和乘客3.0.7上的Rails應用程序。我想在應用程序中發生相應的http錯誤時,在rails應用程序中顯示自定義錯誤頁面(例如/rail_app/public/500.html)。nginx +乘客上的rails應用程序沒有顯示自定義錯誤頁面

這是我目前Nginx的配置文件:

http { 
    passenger_root /usr/lib/ruby/gems/1.8/gems/passenger-3.0.7; 
    passenger_ruby /usr/bin/ruby; 

    include  mime.types; 
    default_type application/octet-stream; 

    #access_log /opt/nginx/logs/access.log main; 

    sendfile  on; 
    #tcp_nopush  on; 

    server { 
     listen 80; 
     server_name localhost; 
     root /var/www/dashboard/current/public; 
     passenger_enabled on; 
     passenger_min_instances 1; 
#  listen 443; 
#  ssl on; 
#  ssl_certificate /opt/nginx/conf/server.crt; 
#  ssl_certificate_key /opt/nginx/conf/server.key; 
     error_page 500 502 503 504 /500.html; 
     location = /500.html { 
      root /var/www/dashboard/current/public/; 
     } 
    } 
} 

此配置不表明Rails應用程序客戶錯誤頁面,而只是發送HTTP錯誤狀態代碼到客戶端。

任何人都知道如何讓nginx /乘客使用http錯誤狀態碼向客戶端發送rails應用程序自定義錯誤頁面?

回答

0

該配置使用:

error_page 500 502 503 504 /50x.html; 

location = /50x.html { 
    root html; 
} 
+0

本傑明,謝謝爲答覆。我試過了,但沒有奏效。以下是關於我想要實現的更多細節:當數據庫關閉時...我想讓Rails應用程序顯示自定義500錯誤頁面,而不是僅將http 500發送到客戶端。也許我應該趕上activerecord異常?只是不知道如何。 – Rafael

+0

產品日誌中的錯誤:'/!\ FAILSAFE /!\ Fri Jun 14 14:30:18 -0400 2013 狀態:500內部服務器錯誤 無法連接到'169.254.1.51'(113) /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.17/lib/active_record/connection_adapters/mysql_adapter.rb:620:in'real_connect'' – Rafael

1

請嘗試以下方法:

# We use the x just because it is for all 5xx errors. 
error_page 500 502 503 504 /5xx.html; 
location = /5xx.html { 
    alias /var/www/dashboard/current/public/; 
} 

重新配置root指令是沒有意義的,因爲它已經被設置爲您之前指定的路徑。 alias確保特定位置在內部與文件系統上的其他位置匹配。所有傳入的請求參數都應該傳遞,如果您的Rails應用程序正在處理這些事情,它應該回答。只要確保您的Rails應用程序不再以500狀態回答(我不知道會發生什麼)。

相關鏈接

1

你可能在你的nginx的配置缺少passenger_intercept_errors on;

看到passenger docs此指令的更多信息

相關問題