避免Grails应用上的Heroku启动超时



我们在heroku雪松中部署了一个grails应用程序,我们的应用程序需要60多秒才能启动,并且根据heroku:

web进程绑定到指定的进程的时间超过60秒美元的端口。当发生这种情况时,动态控制器的进程被终止,动态控制器被关闭考虑了

我们尽可能减少依赖,但在某些情况下启动需要超过60秒,所以我们的应用程序被heroku停止。

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

对于这个问题我有一个很好的解决方案:我分叉了Grails构建包,并添加了一些代码,强制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

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

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

给你!

您可以做两件事。第一种方法是尝试显式地设置依赖项,这样依赖项解析就不会花费很长时间。参见Pete关于Grails启动缓慢的回答。

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

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

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

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

在本地,这将引导时间从20秒减少到13秒左右(总是在谈论第一次引导,在交互模式下,连续引导非常快)。考虑到我还创建了删除表和引导一些数据,尽管避免这并没有解决我的问题,直到我删除了提到的插件。

同样有趣的是,我的另一个应用程序如何在heroku中及时启动,拥有所有的插件。

相关内容

  • 没有找到相关文章

最新更新