2016-08-22 103 views
0

我有一個我用Heroku部署的Django應用程序。我試圖用芹菜來每分鐘創建一個定期任務。然而,當我觀察日誌使用以下命令工人: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) 

有一點要補充。當我使用python shell和「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選項,這是方便,如果您將永遠不會運行多個工作節點,但它不常用,因此不推薦用於生產使用