2017-08-28 5 views
1

私はDjango Dynamic Sc​​raperを使用して基本的なWebスクレーパーを構築しています。私は99%の道を終えました。それはセロリとスクラップと一緒に開発で完璧に動作します。タスクは完全に送信され、実行されます。Django、Djangoダイナミックスクレーパー、Djcelery、Scrapyd - プロダクションのタスクを送信しない

生産に関しては、正しくセットアップされていることがわかりました。 私はVPSでScrapydとCeleryを実行するためにスーパーバイザを使用しています。彼らは両方とも正しいvirtualenvのインストールなどを指しています...

私はそれらがプロジェクトのためにうまくセットアップされていることを知っています:私は自分のサーバーにSSHし、manage.pyシェルを使ってセロリのタスクを実行する非同期タスクを返し、それが実行されます。結果はデー​​タベースに表示され、スクラップとセロリの両方のログに処理中のタスクが表示されます。

問題は、私のスケジュールされたタスクが自動的に起動されないことです。

# 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を実行すると(開発中のように)問題なく動作します。スーパーバイザを使用して2台が実行されたときだけです。

私はおそらく拾い、セロリ/ scrapyd時に生産のことで自動的に実行されることから、SQLiteのDBに保存されている私のセロリの作業を妨げているいくつかの設定や他の欠けています。

+0

「バックグラウンド」でスーパーバイザからscrapydを実行したが、「python manage.py celeryd -l info -B --settings = IG_Tracker.settings」を使ってセロリを実行すると、scrapydプロセスでうまくいく。だから、問題はセロリ/ジャンゴ側のものだと思う。 –

+0

あなたのスーパーバイザのconfigsは –

+0

を喜ば質問にそれらを追加しました。 \t 主な違いは、私がルートとしてではなく無駄にセロリを実行してみましたです.... –

答えて

1

私は結局これを働かせました。たぶんこれは誰かを助けることができるかもしれない。私の問題は、実際にタスク(ワーカー)を実行するために2つ、スケジューリングを監督するために1つずつセロリのために1つのスーパーバイザプロセスしか持たないことでした。私は労働者しかいなかった。これは、私がdjangoシェル(基本的に手動でタスクを作業者に渡す)を使用してタスクを起動したときに、すべてが正常に機能した理由を説明します。ここで

は、 'スケジューラ' セロリのプロセスのための私の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再読しましたすぐに走っている。

関連する問題