2017-08-28 48 views
1

我使用Django Dynamic Sc​​raper來構建基本的Web刮板。我有99%的方式完成。它與Celery和Scrapyd一起發展很完美。任務完成發送和完成。Django,Django動態刮板,Djcelery和Scrapyd - 不在生產中發送任務

至於生產我很確定我已經正確設置了一些東西: 我使用Supervisor在我的VPS上運行Scrapyd和Celery。他們都指向正確的virtualenv安裝等...

這是我如何知道他們都設置罰款的項目:當我SSH進入我的服務器,並使用manage.py外殼執行芹菜任務它會返回一個Async任務,然後執行該任務。結果顯示在數據庫中,我的scrapyd和celery日誌顯示正在處理的任務。

問題是我的計劃任務沒有被自動觸發 - 儘管在開發過程中可以找到完美的工作。

# django-celery settings 

import djcelery 
djcelery.setup_loader() 
BROKER_URL = 'django://' 
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler' 

而且我的上司CONFIGS:

芹菜配置:

[program:IG_Tracker] 
command=/home/dean/Development/IG_Tracker/venv/bin/celery -- 
app=IG_Tracker.celery:app worker --loglevel=INFO -n worker.%%h 
directory=/home/dean/Development/IG_Tracker/ 
user=root 
numprocs=1 
stdout_logfile=/home/dean/Development/IG_Tracker/celery-worker.log 
stderr_logfile=/home/dean/Development/IG_Tracker/celery-worker.log 
autostart=true 
autorestart=true 
startsecs=10 

; Need to wait for currently executing tasks to finish at shutdown. 
; Increase this if you have very long running tasks. 
stopwaitsecs = 600 
killasgroup=true 
priority=998 

Scrapyd配置:

[program:scrapyd] 
directory=/home/dean/Development/IG_Tracker/instagram/ig_scraper 
command=/home/dean/Development/IG_Tracker/venv/bin/scrapyd 
environment=MY_SETTINGS=/home/dean/Development/IG_Tracker/IG_Trackersettings.py 
user=dean 
autostart=true 
autorestart=true 
redirect_stderr=true 
numprocs=1 
stdout_logfile=/home/dean/Development/IG_Tracker/scrapyd.log 
stderr_logfile=/home/dean/Development/IG_Tracker/scrapyd.log 
startsecs=10 

我按照文檔儘可能靠近我可以和使用推薦部署工具(例如scrapyd-deploy等)。另外,當我在服務器上手動運行芹菜和scrapyd時(正如開發中的那樣),事情很好。就在兩人都在使用主管的時候。

我可能會缺少一些設置或其他設置,這會阻止存儲在SQLite數據庫中的芹菜任務被拾取並在生產過程中由芹菜/ scrapyd自動運行。

+0

當我在'背景'中從Supervisor運行scrapyd,但使用'python manage.py celeryd -l info -B --settings = IG_Tracker.settings'運行芹菜時,事情很好,芹菜與scrapyd進程很好。所以我認爲問題出在Celery/Django方面。 –

+0

你的主管配置請 –

+0

加入他們的問題。 \t 主要區別是我嘗試運行芹菜作爲根,但無濟於事.... –

回答

1

好的 - 所以我最終得到了這個工作。也許這可以幫助別人。我的問題是,我只有一個芹菜主管進程,因爲它需要兩個 - 一個用於實際運行任務(工人),另一個用於監督調度。我只有工人。這解釋了爲什麼當我使用django shell啓動任務(實質上手動將任務傳遞給worker)時,一切正常。

下面是 '調度' 芹菜過程我的conf文件:

[program:celery_beat] 
command=/home/dean/Development/IG_Tracker/venv/bin/celery beat -A 
IG_Tracker --loglevel=INFO 
directory=/home/dean/Development/IG_Tracker/ 
user=root 
numprocs=1 
stdout_logfile=/home/dean/Development/IG_Tracker/celery-worker.log 
stderr_logfile=/home/dean/Development/IG_Tracker/celery-worker.log 
autostart=true 
autorestart=true 
startsecs=10 
stopwaitsecs = 600 
killasgroup=true 
priority=998 

我補充說,跑:

supervisorctl重讀 supervisorctl更新 supervisotctl重新啓動所有

我的工作開始馬上跑。