HerokuのCeleryがgithubから自動的にデプロイすると適切にシャットダウンしない

2020-07-29 python django heroku celery

私が抱えている問題は、Herokuでのアプリバージョンのリリース中のCeleryの再起動プロセスに関係しています。コードをプロダクションGitHubにプッシュするたびに、次のようになります。

2020-07-29T15:09:13.725295+00:00 app[worker.1]:   File "<frozen importlib._bootstrap_external>", line 846, in source_to_code
2020-07-29T15:09:13.725295+00:00 app[worker.1]:   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
2020-07-29T15:09:13.725295+00:00 app[worker.1]:   File "/app/.heroku/python/lib/python3.8/site-packages/celery/backends/redis.py", line 22
2020-07-29T15:09:13.725296+00:00 app[worker.1]:     from . import async, base
2020-07-29T15:09:13.725296+00:00 app[worker.1]:                   ^
2020-07-29T15:09:13.725296+00:00 app[worker.1]: SyntaxError: invalid syntax
2020-07-29T15:09:14.451767+00:00 heroku[worker.1]: Process exited with status 1
2020-07-29T15:09:14.516084+00:00 heroku[worker.1]: State changed from up to crashed

その後、手動でコードを再度プッシュする必要があり、セロリは正常に機能します。これは毎回発生します。セロリアプリが他のアプリのシャットダウンが完了する前に起動しようとするのを防ぐ方法はありますか?

Answers

エラーcelery<=4.2およびpython>=3.7問題が原因です。 asyncはpython 3.7のキーワードになりました。

このエラーが一時的なものである理由はわかりませんが、解決策は3.6 Pythonバージョンを指定するか、 celery>=4.3にアップグレードすることです。

dynoスタートアップに関する質問に答えるには: Herokuの機能は、アプリでprebootがアクティブになっているようです。新しいコードをデプロイするときのダウンタイムを実際に削減する手法ですが、新旧のコードを並行して実行する必要があります。記事に記載されているように非アクティブ化できます。

Related