【问题标题】:Avoid Heroku Boot timeout on Grails App避免 Grails 应用程序上的 Heroku 启动超时
【发布时间】:2013-05-10 14:04:02
【问题描述】:

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

一个 Web 进程花费了超过 60 秒的时间来绑定到其分配的 $港口。发生这种情况时,测功机的进程被杀死,测功机 认为崩溃了

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

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

【问题讨论】:

    标签: grails heroku timeout


    【解决方案1】:

    我对这个问题有一个很好的解决方案:我分叉了 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
    

    给你!

    【讨论】:

      【解决方案2】:

      你可以做两件事。第一个是尝试显式设置您的依赖项,以便依赖项解析不会花费那么长时间。见Pete's answer on slow Grails start-up

      您可以尝试的特定于 Heroku 的方法是使用新的 2X Dyno Size,它为您提供 1024MB 的 RAM 而不是 512MB(但请注意,它们是每小时 0.10 美元而不是 0.05 美元,并且不再属于免费层)。

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

      【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-10-13
        • 2015-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-27
        相关资源
        最近更新 更多