2012-03-13 52 views
5

我有一個相當大的,2.3升級到Rails 3應用程序,這是足夠的,它不是通過在Heroku 60秒啓動門,因此它崩潰。我已經完成了一大堆工作來最大限度地減少Gems和初始化器中的加載時間,但是有一些隨機過程正在耗費時間,我不確定它是什麼。我可以使用另一組眼睛。Heroku應用啓動超時

下面是一個GIST與config.ru,application.rb和environment.rb以及Gemfile。

https://gist.github.com/2026140

任何想法,將不勝感激。

回答

7

這是由於,至少在我的情況下,有兩件事:1)很多寶石,2)Mongo需要很長時間才能初始化(大負擔數據庫)。

爲了解決這個問題,在我的本地開發中,我修補了bundler Kernel#require語句,這樣我就可以看到哪些加載時間最長。然後,我試圖刪除它們。除此之外,我將它們設置爲:require => false,並手動將它們放在需要的地方。

其次,我猴子補丁Mongoid,以便它不會嘗試連接到數據庫時,應用程序啓動。這在啓動時間很慢(超過10秒的時間)中有很大的幫助。

+3

最終,我們必須在前面編寫一個代理,綁定到heroku的端口。然後,我們啓動它後面的應用程序。 – Williamf 2012-04-24 19:48:15

+0

你能否提供一些針對「綁定到heroku端口的前端代理」的技巧?我有同樣的問題,並減少應用程序的啓動時間不是微不足道的。 – pmc255 2012-07-08 06:40:41

+1

是的,你介意分享你所做的mongoid更新嗎? – 2012-07-20 15:57:33

5

Heroku的啓動超時位數也是我的。我閱讀了幾篇關於如何繞過它的博客文章,並最終將一些解決方案自動化成了一個寶石。

爲了縮短部署時的啓動時間,您可以修剪啓動時加載的寶石(這並不意味着您必須從應用中修剪它們,只需啓動時間)。

gem_bench評估在啓動時哪些寶石可能不需要

我有一個約250寶石的應用程序,並能夠添加:要求=>虛假約60人,具有戲劇性的效果。

https://github.com/acquaintable/gem_bench

免責聲明:我是這個開源紅寶石寶石的作者。我寫了寶石來幫助自己解決這個確切的問題:Heroku上的60秒超時。

+1

偉大的寶石,感謝您寫它併發布這個答案! – rmcsharry 2016-03-15 11:56:51