2

ubuntu、nginx、unicornのセットアップでは、デプロイメントや移行などのコマンドラインコマンドからの本番ログエントリのみが表示されます。Webサイトのアクティビティからエントリをまったく取得していません。

このバグレポートhttps://github.com/rails/rails/issues/4277#commit-ref-b332877を読み、追加してみました

Rails.logger.instance_variable_get(:@logger).instance_variable_get(:@log_dest).sync = true if Rails.logger 提案されているようにイニシャライザに送信しますが、何かを実行しようとすると同期がゼロであることを示すエラーが発生します

Railsv3.2.1と3.2.9でも同じ問題が発生します

ログ出力を取得する方法はありますか?

4

2 に答える 2

2

最終的にこれを解決しました最初に私は(私は間違っている可能性があり、これについて修正される可能性があります)、この質問をしたときに、ログエントリがフラッシュされていないことを意味するユニコーンジェムにバグがあったと信じていますこの特定の問題https://github.com/rails/rails/issues/4277

私は最新のユニコーンジェムを使用していますが、今はすべて問題ありませんが、ユニコーン構成ファイルと、nGinx/ユニコーンセットアップの本番ログエントリが表示されないその他の理由について簡単に説明します。

1)nGinxは、Webサーバーに接続できない場合、500エラーを返す可能性があります(これを行うようにnginx構成が設定されている場合)。つまり、ユニコーンは起動に失敗しました。

明らかに、ユニコーンが失敗している場合は、Railsが実行されておらず、存在しないRailsログエントリを探し出すことになります。この場合は、ユニコーン構成をチェックして、ユニコーンエラーを書き込んでいる場所を確認してください。私のunicorn.rbファイルは次のようになります

root = "/home/some_user/some_app/current"
pid "#{root}/tmp/pids/unicorn.pid"
stderr_path "#{root}/log/unicorn.log"
stdout_path "#{root}/log/unicorn.log"

エラーと通常のユニコーンログエントリの両方を同じログファイルに送信していることに注意してください。標準では、さまざまなログファイルを使用しますが、確認する必要があるユニコーンログファイルが1つだけの方が簡単です。

ウェブサーバーが実行されていない場合に通常表示される不正なゲートウェイエラーの代わりに500のエラーページが表示される理由は、アプリから静的エラーページを提供するようにnginx.confファイルが設定されている可能性があるためです。このようなものがあるかもしれません

server {
  listen 80;
  server_name my_domain_name.com;
  root /path_to_my_app_root/current/public;

  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  try_files $uri/index.html $uri @unicorn;
  location @unicorn {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://ff1;
  }

  error_page 500 502 503 504 /500.html;
  client_max_body_size 4G;
  keepalive_timeout 10;
}

このerror_page 500 502 503 504 /500.html;行は、サーバーが実行されていない場合、不良ゲートウェイのnginxページではなく、アプリの静的500.htmlページを提供するようにnginxに指示します。これはすばらしいことですが、Rails500ページが必ずしも本番ログエントリを提供するとは限らないことを考慮に入れないと混乱します。

総括する。アプリの500.htmlページが表示されていて、production.logに問題の追跡に役立つエントリが表示されていない場合は、unicorn.rb構成で定義されているユニコーンエラーログファイルを確認して、次のことを確認してください。いずれにせよ、サーバーが起動に失敗した理由が示されています。

于 2013-03-02T11:43:40.423 に答える
2

ただの推測。ファイルをログに記録するための書き込み権限がないユーザーの下でrubyサーバーが実行されている可能性はありますか?警告については、サーバーコンソール(使用可能な場合)を確認してください。

于 2012-12-11T19:10:39.747 に答える