2016-05-21 10 views
2

私はDjangoアプリのタスクを実行するためにセロリとRedisキューを使用しようとしています。 Supervisordはapt-get経由でホストにインストールされますが、セロリは私のシステム上の特定のvirtualenvにあり、 `pip経由でインストールされます。virtualenv(Djangoアプリ)からセロリをホストから実行する

その結果、celeryコマンドをsupervisord経由で実行できないようです。私がvirtualenvの中からそれを実行すると、それはうまく動作しますが、それ以外ではうまく動作しません。どのように私は現在のセットアップの下で実行するように取得するのですか?解決策は、virtualenvの代わりに、celeryをapt-get経由でインストールするだけですか?お知らせ下さい。

/etc/supervisor/conf.d内部マイcelery.confは次のとおりです。

[program:celery] 
command=/home/mhb11/.virtualenvs/myenv/local/lib/python2.7/site-packages/celery/bin/celery -A /etc/supervisor/conf.d/celery.conf -l info 
directory = /home/mhb11/somefolder/myproject 
environment=PATH="/home/mhb11/.virtualenvs/myenv/bin",VIRTUAL_ENV="/home/mhb11/.virtualenvs/myenv",PYTHONPATH="/home/mhb11/.virtualenvs/myenv/lib/python2.7:/home/mhb11/.virtualenvs/myenv/lib/python2.7/site-packages" 
user=mhb11 
numprocs=1 
stdout_logfile = /etc/supervisor/logs/celery-worker.log 
stderr_logfile = /etc/supervisor/logs/celery-worker.log 
autostart = true 
autorestart = true 
startsecs=10 

stopwaitsecs = 600 

killasgroup = true 

priority = 998 

そして、私のDjangoプロジェクトのためのフォルダ構造は次のとおりです。

/home/mhb11/somefolder/myproject 
├── myproject 
│ ├── celery.py  # The Celery app file 
│ ├── __init__.py  # The project module file (modified) 
│ ├── settings.py  # Including Celery settings 
│ ├── urls.py 
│ └── wsgi.py 
├── manage.py 
├── celerybeat-schedule 
└── myapp 
    ├── __init__.py 
    ├── models.py 
    ├── tasks.py  # File containing tasks for this app 
    ├── tests.py 
    └── views.py 

私が行う場合status supervisorctlで確認すると、commandに致命的なエラーが発生します。私はcelery.confで実行しようとしています。助けて!

p.s.ユーザーmhb11にはroot権限がないことに注意してください。また、/etc/supervisor/logs/celery-worker.logは空です。そしてsupervisord.logの中に私が見る関連するエラーはINFO spawnerr: can't find command '/home/mhb11/.virtualenvs/redditpk/local/lib/python2.7/site-packages/celery/bin/‌​celery'です。

+0

'/home/mhb11/.virtualenvs/myenv/local/lib/python2.7/site-packages/celery/bin/celery -A /etc/supervisor/conf.d/celery.confを実行するとどうなりますか?ターミナルから-l info'? –

+0

'/ etc/supervisor/logs/celery-worker.log'には何がありますか? '/ var/log/supervisord.log'や'/var/log/supervisor/supervisord.log'には何がありますか? –

+0

@MuhammadTahir: '/ etc/supervisor/logs/celery-worker.log'は空です。 'supervisord.log'の中に表示される関連するエラーは' INFO spawnerr:コマンドを見つけることができません '/home/mhb11/.virtualenvs/redditpk/local/lib/python2.7/site-packages/celery/bin/celery'です。 '。 –

答えて

4

セロリバイナリへのパスはmyenv/bin/celeryですが、myenv/local/lib/python2.7/site-packages/celery/bin/cel‌‌​​eryを使用しています。

したがって、スーパーバイザ(コマンド= xxx)に渡すコマンドを端末で試しても、同じエラーが発生するはずです。

は、あなたは、私が代わりスーパーバイザ構成により、セロリアプリで-Aパラメータを交換した

command=/home/mhb11/.virtualenvs/myenv/bin/celery -A myproject.celery -l info 

注意して、あなたのcelery.confであなたのcommand=xxxを交換する必要があります。このセロリのアプリは

サイドノートで
directory = /home/mhb11/somefolder/myproject 

celery.confに設定されたプロジェクトディレクトリに関連するあなたはジャンゴとセロリを使用している場合、あなたはDjangoのmanage.py、直接セロリを起動する必要はありませんとセロリを管理することができます。 Like

python manage.py celery worker 
python manage.py celery beat 

詳細については、Django Celery のイントロをご覧ください。

+0

Tahir、応答に感謝します。私はそれを試して、あなたに戻ってきます。 –

+0

あなたはそうです。私はセロリのインストールフォルダにアクセスする必要があると思ったので、ドキュメントのこの部分を見落としました。私は実際に '/ .virtualenvs/myenv/bin/celery'にアクセスする必要がありましたが、実行可能なスクリプトが保存されるフォルダです。 –

+0

Django Celeryは古くなっています - 'Old django Celery Integration Project' –

関連する問題