/ / Django Celery定期タスクが実行されていません(Heroku)? - python、django、heroku、セロリ

Djangoセロリ定期的なタスクが実行されていない(Heroku)? - python、django、heroku、celery

デプロイしたDjangoアプリケーションがあります。Herokuと一緒に。定期的なタスクを毎分作成するようにユーザーに指示していますが、次のコマンドを使用してワーカーのログを確認したところ

heroku logs -t -p worker

自分のタスクが実行されているのが見えません。おそらく足りないステップがありますか。これは以下の私の設定です...

Procfile

web: gunicorn activiist.wsgi --log-file -
worker: celery worker --app=trending.tasks.app

Tasks.py

import celery
app = celery.Celery("activiist")
import os
from celery.schedules import crontab
from celery.task import periodic_task
from django.conf import settings
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

app.conf.update(BROKER_URL=os.environ["REDIS_URL"],
CELERY_RESULT_BACKEND=os.environ["REDIS_URL"])
os.environ["DJANGO_SETTINGS_MODULE"] = "activiist.settings"
from trending.views import *
@periodic_task(run_every=crontab())
def add():
getarticles(30)

追加することが1つあります。私がpythonシェルと "delay()"コマンドを使ってタスクを実行すると、そのタスクは実際には実行されます(ログに表示されます) - しかしそれは一度だけ実行された時にのみ実行されます。

回答:

回答№1の場合は-1

あなたはビートプロセス(これは定期的なタスクを実行する責任があります)のために別のワーカーが必要です。

web: gunicorn activiist.wsgi --log-file -
worker: celery worker --app=trending.tasks.app
beat: celery --app=trending.tasks.app

定期的な作業には作業者は必要ないので関連する行を省略することができます。他の可能性は作業者の中にビートを埋め込むことです:

web: gunicorn activiist.wsgi --log-file -
worker: celery worker --app=trending.tasks.app -B

しかし引用する セロリドキュメンテーション

労働者の中にもビートを埋め込むことができますworkers -Bオプションを有効にすることで、あなたが二つ以上のワーカーノードを実行することが決してない場合に便利ですが、一般的には使われていません。