heroku cedar にデプロイされた grails アプリがあり、アプリの起動に 60 秒以上かかり、herokuによると:
Web プロセスが、割り当てられた $PORT にバインドするのに 60 秒以上かかりました。これが発生すると、dyno のプロセスが強制終了され、dyno がクラッシュしたと見なされます。
可能な限り依存関係を減らしましたが、起動に 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
そして、どうぞ!
Grailのアプリでも同じことを経験しました。アプリの 1 つが正しく起動しましたが、依存関係の構成は非常に似ていましたが、別のアプリをデプロイしたところ、この問題が発生しました。
BuildConfig.groovy (jquery、jquery-ui、twitter-bootstrap、lesscss-resources) のいくつかの js プラグインを削除し、このリソースを手動で追加することで解決しました。
ローカルでは、これによりブート時間が 20 秒から 13 秒に短縮されました (常に最初のブートについて話しますが、インタラクティブ モードでは、後続のブートは非常に高速です)。テーブルの作成と削除、および一部のデータのブートストラップも行っていることを考慮してください。ただし、言及されたプラグインを削除するまで、これを回避しても問題は解決しませんでした。
すべてのプラグインを使用して、私の他のアプリが heroku で時間内に開始する方法も興味深いです。