6

Heroku で unicorn を使用しています。私が抱えている問題の 1 つは、ファイルのアップロードに関するものです。アップロードには Carrierwave を使用していますが、基本的に 2MB 程度のサイズのファイルでも、50 ~ 60% のアップロードが完了すると、Unicorn はタイムアウトします。

ローカルでテストするときはユニコーンを使用しておらず、ローカルで大きなファイルを使用しても問題はありません (ファイルは、本番環境 + ステージングと同様に、carrierwave を使用して AWS にアップロードされます)。ただし、ステージング サーバーと運用サーバーでは、タイムアウトが発生することがわかります。

この問題を解決するための戦略はありますか? このファイルのアップロードを遅延ジョブに入れることができるかどうかわかりません (ファイルが実際に正常にアップロードされたことをユーザーに確認する必要があるため)。

ありがとう!りんご

4

2 に答える 2

2

Heroku 経由で S3 に大きなファイルをアップロードしている場合、タイムアウトを合理的に回避することはできません。誰かが大きなファイルをアップロードしようとすると、タイムアウトになります。Heroku へのアップロード、S3 への転送、処理に 30 秒以上かかる場合、リクエストはタイムアウトになります。正当な理由もありますが、30 秒の要求はパフォーマンスが悪いだけです。

このブログ投稿 (および github リポジトリ) は非常に役立ちます: http://pjambet.github.io/blog/direct-upload-to-s3/

これにより、s3 ファイルへの直接アップロードを機能させることができるはずです。アップロードの大部分で Heroku にアクセスすることを完全に回避できます。jquery-fileupload のコールバックを使用すると、ファイルが正常にアップロードされた後にアプリケーションにポストし、delayed_job を使用してバックグラウンドで処理できます。アップロードが成功したことをユーザーに確認することは、対処する必要があるアプリケーションの問題です。

于 2013-09-26T18:33:13.630 に答える
0

タイムアウトの設定が低すぎるようです。あなたのユニコーン設定はどのように見えますか?

適切な出発点については、https://devcenter.heroku.com/articles/rails-unicornを参照してください。

于 2013-09-26T18:31:34.963 に答える