数か月前、私はついに Heroku 上の Rails アプリを Cedar スタックと Rails 3.2 にアップグレードしました。Cedar のドキュメントで提案されていたので、この 1 行で初期化子を作成しましたRack::Timeout.timeout = 20
。長い間すべてが正常に機能していましたが、この 1 週間で突然、多数のTimeout::Error: execution expired
エラーとそれに関連NoMethodError: undefined method 'result' for #<Timeout::Error: execution expired>
するエラーが発生し始めました。
すべてのエラーは、データベースからの基本的なコンテンツを表示するサイトのありふれた部分にあり、通常の状態で処理するのに 20 秒近くかかるインタラクティブなアクションは行われていません。
これは、さらに dyno が必要になるまでトラフィックが増加した場合に発生するものですか? これらのミステリアスなエラーの原因についてアドバイスをいただければ幸いです。
私がサイトに加えたいくつかの最近の変更:
- Heroku Dev db から Heroku Basic db にアップグレード
- 私のgemfileで明示的にRubyバージョンを定義しました
ruby '1.9.2'
- いくつかのバックグラウンド タスクを実行するために IronWorker (iron.io から) を追加しました (エラーが表示されている日常のユーザーではなく、管理者のみ)。
config/application.rb
次の行で設定しています。config.iw_client = IronWorkerNG::Client.new(:token => iw_conf['iron']['token'], :project_id => iw_conf['iron']['project_id'])
更新: New Relic を確認したところ、Heroku Basic DB のパフォーマンスに極端な問題がありました。過去 24 時間で、データベースの応答時間は 1000 ミリ秒から 6000 ミリ秒の間で推移しています。これは私のミスですか、それとも Heroku の問題ですか?