2012-03-13 96 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