2

Rails アプリの 1 つのリクエストでのみ Heroku R14 エラーが発生します。

そして、ローカルで本番環境を再現し、同じページを表示しますが、エラーはありません。

heroku ログに対するデバッグ後。このリクエストの後、メモリがかなり速く増加することがわかりました。メモリーログはこちら。

2013-08-15T08:28:45.104572+00:00 heroku[web.1]: source=heroku.16694287.web.1.95c77962-7288-4bf5-a912-d2db99eab511 測定=memory_total 値=113.04 単位=MB

2013-08-15T08:29:01.486530+00:00 app[web.1]: 2013-08-15 08:29:01 +0000 で 111.174.65.157 の GET "/issues/98/preview" を開始しました

2013-08-15T08:29:01.486530+00:00 app[web.1]: 2013-08-15 08:29:01 +0000 で 111.174.65.157 の GET "/issues/98/preview" を開始しました

2013-08-15T08:29:07.330011+00:00 heroku[web.1]: source=heroku.16694287.web.1.95c77962-7288-4bf5-a912-d2db99eab511 測定=memory_total 値=220.39 単位=MB

2013-08-15T08:29:29.712928+00:00 heroku[web.1]: source=heroku.16694287.web.1.95c77962-7288-4bf5-a912-d2db99eab511 測定=memory_total 値=511.97 単位=MB

ログを数回確認したところ、heroku がリクエストを処理するために新しい Rails インスタンスを作成し、しばらくしてからメモリ制限を超えるまで新しい Rails インスタンスを再作成しているようです。

2 つのリクエスト ログがあることがわかりました。私のローカル運用環境では、リクエストごとに 2 つのログもあります。また、プレビュー アクションもデバッグします。これは 1 回だけ呼び出されます。そして開発では、そのようなログの問題はありません。したがって、本番環境ではログ構成エラーが発生するはずです。しかし、heroku のメモリの問題とは関係ありません。

プレビュー リクエストは、Prawn::Document オブジェクトのイメージ レンダリング メソッドを次のように呼び出します。

require 'open-uri'
...
# the context is an instance of Prawn:Document
unless image_path.nil?
  f = open(image_path)
  image f, fit: [400, 400]
end    

バグが画像行で発生したと確信しています。画像行を削除すると、プレビュー リクエストが機能します。ページには、画像のない PDF が表示されます。そのままにしておくと、ページがブロックされ、最終的にメモリが超過します。

私はそれを1日デバッグしますが、それ以上のアイデアはありません。

エビのバージョンは 0.12.0 です

私のレールのバージョンは4.0です

助言がありますか?

4

1 に答える 1

2

チームと話し合った結果、理由がわかりました。

画像のサイズは 1920*1080 で、heroku の Prawn::Document.image ではこのような画像を解決できないようです。400*400 作品。

しかし、27k の png 画像が 400M の heroku メモリを消費する理由がわかりません。

于 2013-08-16T02:31:03.430 に答える