2017-12-08 19 views
0

セロリが何らかの理由で自分の設定値を無視しているようです。しかし私は、セロリは、ここで以下のブローカーURLにamqp://guest:**@localhost:5672//セロリ無視する設定値

を接続しようとし続けて私のアプリで、次の値config.py

BROKER_URL = 'redis://localhost:6379/0' 
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0' 
CELERY_RESULT_ENGINE_OPTIONS = {"pool_recycle": 7200, 'echo': True} 
BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 3600} 

を設定している私はセロリに

def configure_extensions(app): 
    # flask-sqlalchemy 
    db.init_app(app) 

    # marshmallow 
    ma.init_app(app) 

    # bcrypt 
    bcrypt.init_app(app) 

    #celery 
    celery.config_from_object(app.config) 

を設定しようとするところで、ここに私です。extensions.py

# Flask-SQLAlchemy extension instance 
from flask_sqlalchemy import SQLAlchemy 
# flask_marshmallow extension instance 
from flask_marshmallow import Marshmallow 
# Bcrypt 
from flask_bcrypt import Bcrypt 
# flask_restful 
from flask_restful import Api 
#celery 
from celery import Celery 

celery = Celery() 

db = SQLAlchemy() 

ma = Marshmallow() 

bcrypt = Bcrypt() 

api = Api() 

私はcelery.config_from_object(app.config)を呼び出す前にapp.configを印刷しました。これは上記のセロリ値を含みます。私はスタックオーバーフローで同様の記事を見てきましたが、まだ私の質問に答えるものを見つけていません。

私はそれが設定値を無視している理由を誰もが知っていますのpython 3.6とセロリ4.1

を使用していますか?私はcelery docsをチェックしていると私は私がここで設定

のための右の値を使用していますがあなたは接頭辞ではない設定キーが付いて混合している最小限の例リポジトリGithub Repo

+0

'' celery.config_from_object(app.configを、力=真)試してみてくださいそれが助けになるかどうか確認してください。 –

+1

Celeryは大文字の設定を廃止しました。すべて小文字で、一部は名前が変更されました。彼らはまだ古い大文字を削除したかどうかは分かりません。 – davidism

+0

実行して問題を示すコードの最小限で完全な例を表示できますか? –

答えて

1

セロリは、Flaskとアプリケーションファクトリのパターンに問題があります。ミゲルGrinbergはそれについて素晴らしいブログ記事を書いた:

https://blog.miguelgrinberg.com/post/celery-and-the-flask-application-factory-pattern

基本的に、あなたは創造の時点で、ブローカーのURLに渡すのではなく、それを延期し、後で設定を更新する必要があります。

私はそうのようなあなたのapp/extensions.pyを変更:

from celery import Celery              

from . import celeryconfig              
celery = Celery(__name__, broker=celeryconfig.broker_url,      
       backend=celeryconfig.result_backend) 

そして今、セロリワーカーを実行すると、以下が得られます。

bash# celery worker -A app.extensions 

transport: redis://localhost:6379/0 
results:  redis://localhost:6379/0 
+0

これは修正されたようですが、どうもありがとうございます。私は実際には既にブログの記事を読んでいたが、私の間違いに気づいていなかった –

+0

あなたが引用した記事は根本的な原因についての説明がなく、opの方法が私のために働くのは残念だ。 – georgexsh

0

へのリンクだと思います。

接頭辞celeryを付けずに小文字を使用してください。

また、実際に設定ファイルを使用していることを確認してください。私はあなたのappが何であるか分からない。輸入可能な場合はconfig_file.pyconfig_from_object('config_file')を使用してください。

+0

これは役に立ちませんでした。私は最小限のサンプルgithubリポジトリへのリンクを追加しました –

0

Celery 4.0では、構成オプションが小文字に変更され、一部が名前変更されました。だから、これまでお使いの設定パラメータを変更する必要があります。

broker_url = 'redis://localhost:6379/0' 
result_backend = 'redis://localhost:6379/0' 
database_engine_options = {"pool_recycle": 7200, 'echo': True} 
broker_transport_options = {'visibility_timeout': 3600} 

より詳細のドキュメントでNew lowercase settingsセクションを参照してください。

+0

これは役に立ちませんでした。小文字の設定変数は、もはやアプリケーション設定に表示されなくなり、別のceleryconfig.pyファイルそれでも動作しません。 –

+0

この行を追加しますか? 'celery.config_from_object( 'celeryconfig')'? –

関連する問題