2016-06-13 11 views
1

私はセロリのタスクを入力する前に作成していたオブジェクトをフェッチしながら、私はMyModel matching query does not exist.エラーを取得しています。私は私のAPIViewの中から仕事を呼んでいます。私の仕事関数内ジャンゴセロリ:モデルオブジェクトはセロリのタスク内に存在しません(ATOMIC_REQUESTS = False)が

my_model_obj = MyModel(x=1, y=2) 
my_model_obj.save() 
my_celery_task.delay(my_model_obj.id) 

、私がやっている:

@task() 
def my_celery_task(my_model_id): 
    MyModel.objects.get(id=my_model_id) 

私はDjangoのDATABASE構成でATOMIC_REQUESTSのparamを持っていません。したがって、デフォルトではFalseにする必要があります。

実際にはDBにデータが保存される前であっても、Djangoがモデルオブジェクトから制御を解放していると思います。これは時々起こる断続的な問題であり、いつかはうまく動作します。

私はモデルオブジェクトの値を更新していましたが、更新された値はセロリのタスクに反映されていないという同様の問題がありました。それを実行するために、私は10秒の遅延を加えました。しかし、今回私はいくつかの永久的な解決策を探しています。これを修正する方法はありますか?この種の振る舞いに対処するために、DjangoやCeleryの設定では設定パラメータがありません。

答えて

0

TransactionMiddlewareを使用していたため、問題は@transaction.commit_on_successデコレータと同じことでした。 TransactionMiddlewareを引き続き使用したい場合は、@transaction.autocommitデコレータをセロリのタスクで表示するか、@transaction.commit_manually

関連する問題