2013-05-17 19 views
5

レールアプリがnginx 1.2.0と3.0.7で動作しています。アプリケーション内で適切なhttpエラーが発生したときに、レールアプリケーション(例:/rail_app/public/500.html)のカスタムエラーページが表示されるようにしたいと考えています。ここでnginx +乗客のレールアプリがカスタムエラーページを表示しない

は私の現在の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/; 
     } 
    } 
} 

この構成では、レールのアプリの顧客のエラーページではなく、単にクライアントへのHTTPエラーステータスコードを送信します表示されません。

誰かがnginx/passengerがhttpエラーステータスコードを使ってrails appのカスタムエラーページをクライアントに送信するために必要なことを知っていますか?

答えて

0

私が使用する設定:

error_page 500 502 503 504 /50x.html; 

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

ベンジャミン、感謝のためにこのディレクティブのpassenger docsを見ます返信のために。私はそれを試みたが、うまくいかなかった。ここでは、私が達成しようとしていることについてもう少し詳しく説明します:データベースがダウンしているとき... http 500をクライアントに送信するのではなく、カスタム500エラーページを表示するようにします。たぶん、私はactiverecordの例外をキャッチする必要がありますか?方法がわからない。 – Rafael

+0

prod logのエラー:/!\ FAILSAFE /!\ Fri Jun 14 10:29:18 -0400 2013 ステータス:500内部サーバーエラー '169.254.1.51'(113)のMySQLサーバーに接続できません /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.17/lib/active_record/connection_adapters/mysql_adapter.rb:620:in'in real_connect'' – Rafael

1

次のことを試してください:それはすでにあなたが前に指定したパスに設定されているようrootディレクティブを再構成

# 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/; 
} 

は、意味がありません。 aliasは、特定の場所がファイルシステム上の別の場所に内部的に一致するようにします。すべての着信要求パラメータを渡す必要があります。この時点でRailsアプリケーションが処理している場合は、応答する必要があります。あなたのRailsアプリケーションが500のステータスで再び応答していないことを確認してください(私は何が起こるのか分かりません)。あなたはおそらくあなたのnginxの設定でpassenger_intercept_errors on;を逃している

関連リンク

関連する問題