2017-08-04 8 views
0

私はDjangoアプリを持っており、Celery非同期タスクを追加する必要があります。私は、例えばMY_VARIABLE = 'test'のようなdev.pyの設定変数をタスクに呼びたいと思います。Celeryタスクの実行中にsettings.py変数を呼び出す

from django.conf import settings 

@shared_task 
def test_task(): 
    return settings.MY_VARIABLE 

経由セロリの労働者をruningている間dev.pyが

CELERY_BROKER_URL = 'amqp://guest:[email protected]:5672//' 
CELERY_RESULT_BACKEND = 'django-db' 
# CELERY_RESULT_BACKEND = 'db+postgresql+psycopg2://postgres:[email protected]/postgres' 

CELERY_ACCEPT_CONTENT = ['json'] 
CELERY_TASK_SERIALIZER = 'json' 
MY_VARIABLE='test' 

のように見えます

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings.dev') 

app = Celery('proj') 

app.config_from_object('django.conf:settings', namespace='CELERY') 

app.autodiscover_tasks() 

ように私のcelery.pyが見えます:例を簡素化するためには、私の仕事があることを前提としています

export DJANGO_SETTINGS_MODULE=proj.settings.dev 
celery -A proj worker -l info 

呼び出した呼び出し元

セロリ端末の応答で、私はAttributeErrorを受け取りました。

'Settings' object has no attribute 'MY_VARIABLE' 

私は間違っていますか?そして、私はどのように正しく変数を非同期タスクに変えることができますか?

ありがとうございます!

+0

あなたのcelery.pyの外観は – iklinac

+0

です@iklinac質問にcelery.pyを追加しました – sorryMike

答えて

0

あなたのdev.pyファイルがDjango設定から読み込まれていないようです。あなたのセロリのアプリとタスクコードは本当に正しいように見えます。 dev.pyを読み込んだときに設定にビットを貼り付けることができれば助けになるでしょう。

+0

質問にdev.pyの内容を追加しました。 – sorryMike

+0

はい、** MY_VARIABLE **はあなたのdev.pyの例ではありません。また、manage.pyがDjangoの設定としてdev.pyを読み込んでいますか? – codeadict

+0

自分のdev.pyを修正し、DAJNGO_SETTINGS_MODULE = proj.settings.devでmanage.pyを起動します。問題は引き続き発生します。私のDjangoバージョンは1.11で、Celeryは4.0.2 – sorryMike

関連する問題