コード自体を変更せずに、Celery でタスクを無視する方法はありますか?
たとえば、Django メールを使用する場合、Dummy Backend設定があります。.env
ファイルから一部の環境 (テストやステージングなど) でのメール送信を無効にできるので、これは完璧です。メール送信を処理するコード自体は、if
ステートメントやデコレータで変更されていません。
セロリのタスクについては、モックやデコレーターを使用してコードで実行できることはわかっていますが、Django メールのように、12factors に準拠したクリーンな方法で実行したいと考えています。何か案が?
私がこれをしたい理由を説明する編集:
この背後にある主な動機の 1 つは、Django Web サーバーと Celery タスクの間の結合を作成することです。たとえば、単体テストを実行しているときに、ブローカー サーバー (私にとっては Redis) が実行されていない場合、delay()
メソッドが呼び出されると、Celery がタスクを Redis に送信しようとするときにタイムアウトがないため、メソッドが永久にフリーズします。アーキテクチャの観点からは、これは非常に悪いことです。Celery ブローカーを実行する必要なく、単体テストを適切に実行できるようにしたいです。
ありがとう!