在Grails App上避免使用Heroku Boot超时

时间:2013-04-22 16:01:52

标签: grails heroku timeout

我们在heroku雪松中部署了一个grails应用程序,根据heroku,我们的应用程序启动时间超过60秒:

  

Web进程花费的时间超过60秒才能绑定到指定的进程   $ PORT。当发生这种情况时,dyno的进程被杀死并且dyno是   被认为是崩溃了

我们减少了依赖关系,但在某些情况下,启动时间超过60秒,因此我们的应用程序被heroku停止。

你知道一些避免这种情况的方法吗?

3 个答案:

答案 0 :(得分:4)

我有一个很好的解决方案来解决这个问题:我分叉了Grails buildpack并添加了一些强制Jetty尽早绑定到$PORT的代码,以便Grails可以随时启动它;在Grails启动时,请求只是因为404错误而失败,但至少应用程序可靠启动。

https://github.com/funfork/heroku-buildpack-grails-earlybind

使用它:

heroku config:set BUILDPACK_URL=https://github.com/funfork/heroku-buildpack-grails-earlybind

如果你需要强制重新编译一个slug(确保你没有先挂起提交):

git commit --allow-empty -m "empty commit"
git push heroku master

你走了!

答案 1 :(得分:1)

你可以做两件事。第一种方法是尝试显式设置依赖项,以便依赖项解析不需要那么长时间。请参阅Pete's answer on slow Grails start-up

你可以尝试的特定于Heroku的东西是使用新的2X Dyno Size,它可以提供1024MB的RAM而不是512MB(但请注意它们每小时0.10美元而不是0.05美元,不再属于免费等级。)

最后,由于Heroku正在寻找与$PORT的绑定,您可以监听$PORT并排队任何请求,直到应用程序完全启动。

答案 2 :(得分:1)

我在Grail的应用程序中遇到了同样的情况。我的一个应用程序正确引导,但后来我部署了另一个并遇到了这个问题,尽管它们的依赖项配置非常相似。

通过删除BuildConfig.groovy (jquery,jquery-ui,twitter-bootstrap和lesscss-resources)中的一些js插件并手动添加此资源来解决它。

在本地,这种启动时间从20秒减少到13秒或多或少(总是谈论第一次启动,在交互模式下连续启动非常快)。考虑到我还创建了drop table并引导了一些数据,尽管在我删除提到的插件之前避免这个并没有解决我的问题。

我的其他应用程序如何设法在heroku中及时启动所有插件,这也很有趣。