8

apache2 仮想サーバーを使用して、同じサーバー上で複数の Django/apache/wsgi Web サイトを実行しています。セロリを使用したいのですが、複数の Web サイトで celeryd を起動すると、すべての Web サイトで最後に起動した celeryd インスタンスの構成 (ログ、DB など) が使用されます。

複数の Celeryd (Web サイトごとに 1 つ) またはそれらすべてに 1 つの Celeryd を使用する方法はありますか? 実行可能のようですが、方法がわかりません。

4

2 に答える 2

7

この問題は大きな頭痛の種でした。最初にここに来たとき、@Crazyshezy のコメントに気づきませんでした。各 Web アプリのsettings.pyでBroker URL を変更することで、これを実現しました。

app1.settings.py

BROKER_URL = 'redis://localhost:6379/0'

app2.settings.py

BROKER_URL = 'redis://localhost:6379/1'
于 2013-09-25T12:02:15.633 に答える
3

はい、方法があります。スーパーバイザーを使用して、必要なすべてのプロジェクトでセロリ デーモンを起動します。

スーパーバイザ構成ファイルは次のようになります。

[program:PROJECTNAME]
command=python manage.py celeryd --loglevel=INFO --beat
environment=PATH=/home/www-data/projects/PROJECTNAME/env/bin:/usr/bin:/bin
directory=/home/www-data/projects/PROJECTNAME/
user=www-data
numprocs=1
umask=022
stdout_logfile=/home/www-data/logs/%(program_name)s.log
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=10
stderr_logfile=/home/www-data/logs/%(program_name)s.error.log
stderr_logfile_maxbytes=50MB
stderr_logfile_backups=10
autorestart=true
autostart=True
startsecs=10
stopwaitsecs = 60
priority=998

このセットアップを使用すると、別の利点もあります。セロリ デーモンは完全にユーザー空間で実行されます。

プロジェクトには異なるブローカー バックエンドを使用することを忘れないでください。同じ rabbitmq 仮想ホストを使用する場合、またはすべてのプロジェクトで同じ redis データベースを使用する場合は機能しません。

于 2012-12-18T08:23:01.603 に答える