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です
助言がありますか?