ユースケースは、キャッシュをバストすることです。Herokuアプリが再起動するたびにタスクを実行する良い方法はありますか?
Ruby Herokuアプリが再起動(またはデプロイ)されるたびに、与えられたコード(またはレーキタスク)を実行するには良い方法はありますか?
ユースケースは、キャッシュをバストすることです。Herokuアプリが再起動するたびにタスクを実行する良い方法はありますか?
Ruby Herokuアプリが再起動(またはデプロイ)されるたびに、与えられたコード(またはレーキタスク)を実行するには良い方法はありますか?
私が知っている限り、Heroku API経由でこれを行う方法はありません。 Heroku Platform APIはこれをサポートしていません。
あなたができること(高速ですが!)は、コード内のSIGTERMメッセージをリッスンします(これはHerokuがアプリケーションプロセスを再起動しようとするとそのプロセスに送信されます)すぐにあなたのスクリプト。あなたはCIのいくつかの並べ替えを使用している場合、あなたはおそらくそこにそれを設定することができますhttps://devcenter.heroku.com/articles/dynos#graceful-shutdown-with-sigterm
:
はここでHerokuの上SIGTERMについての詳細です。相続人はCircleCIでそれを行う方法:
deployment:
production:
branch: production
commands:
- git push [email protected]:foo-bar-123.git $CIRCLE_SHA1:master
- heroku run rake <your task> --app <your app name>
をあなたはまだ一緒に最初のHerokuのにGitのプッシュを行い、その後、heroku run
(アプリ年代を通じてタスクをつぶし、あなたのキャッシュを実行するスクリプトを鞭打つことができCIを使用していない場合bin/
フォルダは明白な場所になります)。
注:heroku run:detached
を使用すると、stdoutではなくログに出力が送信されます。
このユースケースの一部は、Herokuアプリがデプロイ以外の理由で再起動されることです。特にENVを変更する場合。 –
さて、あなたはいつも2つのスクリプト、またはモジュラーのスクリプトを書くことができます。スクリプトの最初の引数が "deploy"であるかどうかを確認してから、キャッシュをデプロイしてフラッシュしてください。それが "再起動"している場合は、必要なENV変数を変更し(パスして)、再起動してフラッシュします。本当に難しいことではありません。 –
新しいリリースが導入される前にコマンドを実行できる「リリース」機能を使用できます。 https://devcenter.heroku.com/articles/release-phase
Procfileで実行するコマンドを定義します。ドキュメントから
release: rake db:migrate
:リリースが作成された後
解除コマンドがすぐに実行されますが、リリースは、アプリのダイノ形成に配備される前に。つまり、新しいリリースを作成するイベントの後に実行されます。
高速実行コードの場合、これは良い解決策のようです。 –
もう一つの解決策は、ログドレイン(https://devcenter.heroku.com/articles/log-drains)を介してHerokuログを購読してから、dyno restartログイベントを待ち受けることです。 – rdegges
聞いているのは誰ですか? –