0

誰かがこれに光を当てることができることを願っています。wicked_pdf ライブラリを使用して PDF を生成する Rails 2 アプリがあります。nginx によってプロキシされたユニコーンの下でアプリを実行しています。

問題は、アプリが PDF を提供しようとするたびにタイムアウトし、nginx が 404 を報告することです。ユニコーン ポートを介してアプリを確認したところ、正常に動作するため、ユニコーンと nginx の間で何かが発生しているため、これが失敗します。

ログ ファイルは有用な情報を報告していません。アプリケーションログはすべてを正常に報告するだけで、Sending data行を出力しません。nginx ログ レポート*443 upstream prematurely closed connection while reading response header from upstream, client.

Unicorn エラー ログは、接続がタイムアウトし、ワーカーが強制終了されていることを報告していますが、PDF の生成には 30 秒かかりません。

worker=2 PID:14099 timeout (31s > 30s), killing
reaped #<Process::Status: pid=14099,signaled(SIGKILL=9)> worker=2
worker=2 ready

サイトの nginx 構成で何かが欠けているように感じますが、どこから調べればよいかわかりません。

以下のnginx構成を含めました:

server {
    listen *:80;
    server_name server_name.example.com;
    root /var/apps/application/current/public;
    try_files /system/maintenance.html $uri $uri/index.html @app;
    location @app {
        proxy_pass http://unix:/tmp/application.sock;
        proxy_set_header Host $http_host;
    }
    error_page 404 400 500 502 /error.html;
    location = /error.html {
        root /var/www;
    }
}
4

2 に答える 2

0

わかりました、数時間突っついた後、ようやくこれを解決しました。

タイムアウトを十分に大きく設定すると、最終的にPDFが通過し、他の場所でタイムアウトになることが示されました。最終的に、PDF のレイアウト ファイルで request.env['HTTP_HOST'] にアクセスして、画像の絶対パスを作成していたことが判明しました。これにより、wkhtmltopdf が間違ったホスト名でサーバーに接続しようとして失敗していました。

解決策は、絶対ファイル システム パスに置き換えることでした。

于 2012-02-07T09:03:13.387 に答える
0

環境ファイルでこれを設定してみてください:

ActionController::Streaming::X_SENDFILE_HEADER = 'X-Accel-Redirect' 

注: これは、Apache ではなく Nginx で機能します。

于 2012-02-06T15:25:47.097 に答える