2012-03-13 15 views
5

Rails 3のアプリケーションにかなり大きな2.3のアップグレードがありました。それは、Herokuの60秒のスタートアップドアを通らないほど十分に太いので、クラッシュしています。私は、Gemとイニシャライザ内での読み込み時間を最小限に抑えるためにたくさんの作業を行ってきましたが、いくつかのランダムなプロセスが時間を燃やしています。もう一組の目を使うことができました。Heroku Appブートタイムアウト

ここにconfig.ru、application.rb、environment.rbとGemfileを持つGISTがあります。

https://gist.github.com/2026140

任意の考えをいただければ幸いです。

答えて

7

これは、少なくとも私の場合、1)多くの宝石、2)モンゴーは初期化に時間がかかります(大きな負担をかけるデータベース)。

宝石を修正するには、私のローカル開発者に、バンドルのKernel#requireステートメントにパッチを当てました。その後、私はそれらを削除しようとしました。それを除いて、私はそれらをrequire => falseに設定し、必要な場所に手動で必要としました。

第2に、私はモンゴイをパッチして、アプリケーションの起動時にデータベースに接続しようとしないようにしました。これは、起動時間が遅い(10秒を超えて削除された)場合に劇的に役立ちました。

+3

最終的に、私たちはherokuのためにポートにバインドするプロキシを書かなければなりませんでした。そして、その背後にあるアプリケーションを起動します。 – Williamf

+0

"herokuのためのポートにバインドする"プロキシのためのいくつかのポインタを提供できますか?私は同じ問題があり、アプリの起動時間を短縮することは簡単ではありません。 – pmc255

+1

はい、あなたが作ったモンゴイドの更新を共有してもよろしいですか? –

3

heroku-forwardの宝石は、60秒Herokuのタイムアウトに勝つのに役立ちます。

5

Herokuさんのブートタイムアウトも私に似ています。私はそれを回避する方法についていくつかのブログの記事を読んで、いくつかのソリューションを宝石に自動化しました。

デプロイ時の起動時間を短縮するには、起動時にロードされたgemをトリミングすることができます。これは、起動時にアプリケーションからトリムする必要はありません。

gem_benchは、起動時にが必要な可能性があると評価します。

私は約250個の宝石を持つアプリを持っていて、そのうち約60個にrequire => falseを加えて劇的な効果を得ました。

https://github.com/acquaintable/gem_bench

免責事項:私は、このオープンソースのルビー宝石の著者です。私はこの正確な問題を解決するのに役立つ宝石を書いた:Herokuの60秒のタイムアウト。

+1

素晴らしい宝石、それを書いて、この回答を投稿してくれてありがとう! – rmcsharry

関連する問題