2012-02-07 34 views
0

私は基本的に同じコードベースで動作する2つのサイトを持っていますが、設定の違いはわずかです。各サイトはDjangoに組み込まれており、WordPressブログは統合されています。Celeryタスクを適切な設定で確実に実行するにはどうすればよいですか?

各サイトでは、WordPressのブログ投稿をインポートしてDjangoデータベースに保存する必要があります。ユーザーが投稿を公開すると、WordPressはDjango側のWebhook URLにヒットします。このURLは、JSON版のポストを取得してインポートするCeleryタスクを開始します。

私の最初の考えは、各サイトがmanage.py celerydという独自のインスタンスを実行でき、それぞれが独自のvirtualenvであり、2つのサイトがお互いに離れているということでした。それぞれは別々の起動スクリプトでデーモン化されています。

しかし、何とか衝突しているように見えます。一度に1つずつ実行できますが、両方が実行されている場合、1つのインスタンスはタスクを受け取らないか、間違った設定(この場合はそれぞれWORDPRESS_BLOG_URLの設定)でタスクが実行されます。

私はRedisキューを使用していますが、それは違いがあります。私はここで間違って何をしていますか?

答えて

2

セロリで使用するデフォルトキューの名前を指定しましたか? CELERY_DEFAULT_QUEUEを設定していない場合は、両方のサイトが同じキューを使用し、お互いのメッセージを取得します。メッセージを分離しておくために、この設定をサイトごとに異なる値に設定する必要があります。

編集

そうだね、CELERY_DEFAULT_QUEUEは唯一のRabbitMQのようなバックエンドのためです。私はあなたのbroker urlの最後に別の番号を使用して、サイトごとに異なるデータベース番号を設定する必要があると思います。

+0

これはRedisで動作しますか?ドキュメントはこれがAMPQだけのように聞こえるようにします。コマンドラインでCELERY_DEFAULT_QUEUEを設定に追加し、-Q(キュー名付き)を追加しても、これまでのところ同じ問題が発生しています。 –

+0

私は自分の答えを編集しました。そうです、その設定はAMPQブローカーのためだけです。 –

+0

私はそのトリックをしたと思います。私は 'CELERY_REDIS_ *'設定もタスクルーティングを設定すると仮定しましたが、 'BROKER_UR'Lは結果ストアから独立して設定する必要があります。 –

0

django-celeryを使用している場合は、virtualenvの外でセロリのインスタンスを実行していないことを確認してください。その後、完了したようにmanage.py celerydを使ってvirtualenv内のセロリインスタンスを起動します。あなたのインスタンスを追跡するためにsupervisordを設定することをお勧めします。

関連する問題