2016-08-22 23 views
0

私はHerokuでデプロイしたDjangoアプリケーションを持っています。私は毎分定期的な作業を作成するためにセロリを利用しようとしています。しかし、私は次のコマンドを使用して、労働者のためのログを観察するとき:Django Celery Periodic Taskが実行されていません(Heroku)?

heroku logs -t -p worker 

を私は自分のタスクが実行されて表示されません。おそらく私は行方不明ですか?これは

Procfile

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

...

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) 

追加するための一つのことTasks.py

以下の私の構成です。 Pythonシェルと "delay()"コマンドを使用してタスクを実行すると、タスクは実際に実行されます(ログに表示されます)。ただし、実行されるのは一度だけです。

答えて

-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 

が、celery documentationを引用する:

あなたは、これがあれば便利である、労働者-Bオプションを有効にすることで、作業者の内側に埋め込みビートをも開始することができます複数のワーカーノードを実行することはありませんが、一般的には使用されていないため、プロダクション用途には推奨されません。

関連する問題