我遇到的问题是在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
然后我必须再次手动推送代码,芹菜就可以正常工作了。这种情况每一次都会发生。有没有办法防止芹菜应用程序在其他应用程序关闭之前启动?
错误来自celery<=4.2
和python>=3.7
的问题。async
成为python 3.7中的一个关键字。
我不知道为什么这个错误对您来说是暂时的,但解决方案是指定3.6 python版本或升级到celery>=4.3
。
要回答有关dyno启动的问题:Heroku所做的听起来像preboot
对您的应用程序是活动的。这是一种在部署新代码时实际减少停机时间的技术,代价是新旧代码并行运行。您可以按照文章中的说明停用它。