2017-02-14 8 views
1

セロリタスクでデータベースレコードを作成したいと思います。しかし、何らかの理由でobject.save()メソッドがtask.apply_async()(作業を非同期に適用する)で動作していません。ローカルで実行している間、セロリのタスクでデータベースに保存されているDjando Celery:セロリタスクはDBにレコードを作成しません

同じレコード(ティッカー):

get_all_tickers.apply() 

しかし、非同期モードで保存されていません。どちらの場合も

get_all_tickers.apply_async() 

文をINSERTサーバーログに表示されます。

models.py

class Ticker(TimeStampedModel): 
    ask = models.DecimalField(max_digits=18, decimal_places=8) 
    bid = models.DecimalField(max_digits=18, decimal_places=8) 
    pair = models.ForeignKey(Pair) 

tasks.py

from celery import shared_task 
... 
@shared_task() 
def get_all_tickers(): 
    pair = Pair.objects.last() 
    ticker = Ticker(ask=Decimal(1.0), bid=Decimal(1.0), pair=pair) 
    ticker.save() 

答えて

0

Djangoのサーバー(ルート)、セロリ(celery_user)タスクは、したがって、異なるユーザによって実行されました、celery_userにはtへの書き込み権がありません彼はデータベース。したがって、task.apply()ルートで実行され、save()レコードとtask.apply_async() - となり、celery_userとすることはできません。 celery_userにグループを追加するとよりなり、が

chown celery_user:celery_user db.sqlite3 

この問題に対する短期的な解決策は、celery_userデータベース(sqlite3のを使用して開発ENV)の所有者を作ることでした適切な(短期的に)。

または長期 - 非特権ユーザーhttps://www.syncano.io/blog/configuring-running-django-celery-docker-containers-pt-1/

p.s:私はhttp://docs.celeryproject.org/en/latest/reference/celery.contrib.rdb.html(セロリのためのデバッグツール)といくつかの問題を抱えていたと実行のすべて。タスクが受信されるたびに(つまり、30秒ごとに)Telnetが切断されました。デバッグ専用のタスクを使用していることを確認してください。

関連する問題