10


1

RailsアプリはすべてのURLに対してHTTP 500を返していますが、ログファイルには何も表示されません。 問題を診断する方法

ApacheとPhusion Passengerを備えた運用サーバーで実行されているRailsアプリがあります。 Mongrelを使用すると、アプリはローカルで正常に動作しますが、運用サーバーにURLをロードしようとすると、HTTP 500が返されます。 アプリケーションの静的要素(JavaScriptファイル、スタイルシート、画像など)を問題なく取得できるため、サーバーが正常に動作していることはわかっています。 Passengerのステータスも確認し、アプリをロードしています(アプリの500 Internal Server Errorページが返されるので、デフォルトのApacheだけではないはずです)。 また、 script / console production`を介してアプリをロードし、 app.get( "/") `のような操作を行うと、500も返されます。

問題は、ログファイルに問題を示す_nothing_があることです。 `production.log`は空です。 Apacheエラーログにも、Apacheに問題はありません。 何が起こっているのかが分からず、問題を診断する方法がわかりません。

私は少しあいまいだったかもしれませんが、誰が問題が何であるかについて提案をすることができますか? または、少なくともそれを診断する方法はありますか?

6 Answer


6


この特定の状況に対する答えは、私のアプリの問題でした。 モデルクラスの1つは、アプリの他の部分とは異なるデータベース接続を使用しました。 このデータベース接続は正しく構成されていません。 ログファイルに何も書き込まれなかった理由は、Railsが何をすべきか分からずに救済されたためだと思います。

他の人がこの問題をどのように診断したかを見ることが役立つ場合があるため、ここに私の思考プロセスがありました:

  1. 問題はApacheではありえませんでした:エラーは書き込まれませんでした Apacheログファイル。

  2. 問題はおそらく乗客に関係していなかった:乗客は何も書いていなかった 「passenger-status」がロード済みとして表示し、アプリの500内部サーバーエラーページ(デフォルトのApacheのものではない)を表示したため、Apacheログファイルにエラーがあり、アプリを適切にロードしているようです。

そこから、私は、初期化フェーズの非常に早い段階で起きたアプリの破損が原因であると推測しましたが、アプリが完全に保釈されて例外がスローされる原因ではなかったと考えています。 GoogleのPhusion Passengerをいじって、最終的にこの役立つhttp://groups.google.com/group/phusion-passenger/browse_thread/thread/91cbe36f7c00e5f9/2f03ea70bdf1bc0d?lnk=gst&q=500#2f03ea70bdf1bc0d [ 、このエラーはデータベース接続の問題である可能性が示唆されました。 案の定、この誤って構成されたデータベースとそれへのすべての参照を削除すると、アプリが機能しました!


1


Passengerを使用してアプリをローカルで実行しようとしましたか?


1


Mongrelで本番モードでローカルにアプリケーションを実行して、その特定の環境に奇妙な問題がないことを確認してください。 それが機能する場合、コードベースの問題ではないことがわかります。 静的コンポーネントが適切に提供されているため、Apacheが正常に機能していることがわかります。 残っているシステムの唯一のギアは旅客です。 この時点で、私はそれが不適切に設定された乗客であると言うでしょう。 Passenger設定ファイルを投稿し、https://serverfault.com/ [ServerFault]で質問する必要があります。


1


試してみることがいくつかあります。

ドキュメントから次のことを行っていますか?

_ _ 6.3.7。 Railsアプリケーションのログファイルが書き込まれていない

知っておくべきことがいくつかあります。

  By default, Phusion Passenger runs Rails applications in production

モードなので、development.logではなくproduction.logを必ず確認してください。 設定についてはRailsEnvを参照してください。 *

  By default, Phusion Passenger runs Rails applications as the owner

environment.rbの そのため、ユーザーがログファイルへの書き込み権限を持っている場合にのみ、ログファイルに書き込むことができます。 それに応じて、ログファイルをchmodまたはchownしてください。

  See User switching (security) for details.

RedHatから派生したLinuxディストリビューション(FedoraやCentOSなど)を使用している場合、SELinuxが干渉している可能性があります。 RedHatのSELinuxポリシーでは、Apacheがhttpd_sys_content_tセキュリティコンテキストを持つディレクトリの読み取り/書き込みのみを許可します。 次のコマンドを実行して、Railsアプリケーションフォルダーにそのコンテキストを指定してください。 _ _

vhostまたはhttpf.confファイルを確認しましたか? ロギングディレクティブはありますか?

トップレベルのApacheログファイルを確認してください

ラックアプリがインストールされていますか?


0


私の提案は、「Hello World」の土地に戻って、可能な限り最小のRubyサンプルアプリケーションを作成し、アップロードして、サーバー上のPassengerまたはRubyに問題があるかどうかを確認することです。


0


馬鹿げた提案かもしれませんが、テスト中に本番環境のログレベルを上げることから始めることをお勧めします。 `config / environments / production.rb`でこれを行い、以下を使用します:

config.log_level = :debug

これにより、少なくとも何らかのバックトレースが得られるはずなので、問題を見つけ始めることができます。 それでも何も得られない場合は、実動サーバーでgem / pluginが欠落しているような単純な問題があることがわかります。 そのようなことは、「500」エラーとして明らかになる可能性があり、あなたにとってあまり冗長ではありません。

実稼働サーバーでテストスイートを実行できますか?