2012-02-06 31 views
0

私は誰かがこれについていくつかの光を当てることができると思っています。 wicked_pdfライブラリを使用してPDFを生成するRails 2アプリがあります。私たちはnginxによってプロキシされたユニコーンの下でアプリケーションを実行しています。NginxでプロキシしたときにPDFがRailsアプリから配信されない

問題は、アプリケーションがPDFを提供しようとするたびに時間切れになり、nginxが404を報告するということです。ユニコーンポート経由でアプリをチェックしたので、うまく動作するので、ユニコーンとnginxの間で何か起こっていますこれは失敗する。

ログファイルには何も役立ちません。アプリケーションログはすべて正常に報告しますが、Sending data行を出力しません。 nginxログは*443 upstream prematurely closed connection while reading response header from upstream, clientを報告します。

ユニコーンエラー・ログには、接続がタイムアウトして、労働者が殺されていることを報告しますが、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; 
    } 
} 

答えて

0

私は最終的にこの問題を解決しました。

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

解決方法は絶対ファイルシステムのパスのためにそれをスワップアウトすることでした。

+0

解決方法とconfファイルの詳細については、wkhtmltopdfと同じ問題があります –

0

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

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

注:これはnginxのではなく、Apacheのために働きます。

+0

Ariejan、あなたのご意見ありがとうございます。私はそれを試みたが、喜びはなかった。私はその行がサーバー上でファイルを生成し、それにリダイレクトすることに関連していると信じています。これは私がやっていることではありません。このアプリは、PDFデータが生成されるとすぐにストリーミングしています。 – danbee

関連する問題