我正在将Celery与Redis一起用于在Heroku上托管的Flask webapp(使用Docker)。 webapp的用户应该安排在他们确定的时间点执行的任务。此时间点可以设置为将来1小时到30天之间。
将应用程序推送到测试环境后,事情似乎工作正常。安排的任务,例如未来1天会被执行。在执行之前,我可以看到它们是按照以下命令安排的(大写字母表示占位符)
celery -A MYAPP.blueprints.MYBLUEPRINT.tasks inspect scheduled
如果任务安排在例如2018-06-03在11:00(截至目前为止的1天),该命令将发出以下内容。最后一行显示计划任务。
########## create_app executed. ##########
########## create_celery_app executed. ##########
-> celery@worker1: OK
* {u'priority': 6, u'eta': u'2018-06-03T11:00:00+00:00', u'request': {u'args': u"[8, 1, u'MYEMAIL@gmail.com', u'03.06.2018', u'11:00']", u'time_start': None, u'name': u'MYAPP.blueprints.MYBLUEPRINT.tasks.EXECUTE_TASK_A', u'delivery_info': {u'priority': 0, u'redelivered': None, u'routing_key': u'celery', u'exchange': u'celery'}, u'hostname': u'celery@worker1', u'acknowledged': False, u'kwargs': u'{}', u'id': u'c2fbbbdc-6e80-4b9b-be17-e74777dfea7d', u'worker_pid': None}}
问题:当我现在对应用程序进行微小更改(例如在python文件中声明另一个变量)并再次将应用程序推送到Heroku时,命令会告诉我没有计划任务,即使任务已经存在,然后再将更新的webapp推送到Heroku。
########## create_app executed. ##########
########## create_celery_apps executed. ##########
-> celery@worker1: OK
- empty -
问题:为什么会发生这种情况?如何防止这种情况发生?我目前正在测试应用程序但是当它在生产中运行时,当我将更新的Web应用程序推送到Heroku时,任务不会消失。
我正在使用这些版本:
Flask==0.10.1
redis==2.10.5
celery==3.1.23
推送应用程序,我正在使用
heroku container:push --recursive --app MYAPP
heroku container:release web worker --app MYAPP
Dockerfile.worker中的命令是
CMD celery -A MYAPP.blueprints.MYBLUEPRINT.tasks worker -l INFO --concurrency=10 -n worker1
附加信息:我之前在Dockerfile.worker中也使用了不同的命令:基本上是相同的命令,但没有" - 并发= 10 -n worker1"最后。
这导致以下结果:在推送应用程序之前,我会在显示所有计划任务时获得不同的工作者名称(" celery @"之后的值)。例如。这里的名字是" 8428c601-f4ea-4df3-9731-a49cf3797f31":
########## create_app executed. ##########
########## create_celery_apps executed. ##########
-> celery@8428c601-f4ea-4df3-9731-a49cf3797f31: OK
* {u'priority': 6, u'eta': u'2018-06-03T13:00:00+00:00', u'request': {u'args': u"[22, 1, u'MYEMAIL@gmail.com', u'03.06.2018', u'11:00']", u'time_start': None, u'name': u'MYAPP.blueprints.MYBLUEPRINT.tasks.EXECUTE_TASK_A', u'delivery_info': {u'priority': 0, u'redelivered': None, u'routing_key': u'celery', u'exchange': u'celery'}, u'hostname': u'celery@8428c601-f4ea-4df3-9731-a49cf3797f31', u'acknowledged': False, u'kwargs': u'{}', u'id': u'797d2241-f21d-41ab-937b-c805f2dc1b60', u'worker_pid': None}}
在推送更新的网络应用程序后,再次没有显示计划任务,现在名称为" 3ea34baa-e27b-4819-b998-9c54690828f6"
########## create_app executed. ##########
########## create_celery_apps executed. ##########
-> celery@3ea34baa-e27b-4819-b998-9c54690828f6: OK
- empty -