2017-12-08 2 views
0

셀러리가 내 구성 값을 무시하는 것으로 보입니다. 나는 셀러리에게샐러리 내 구성 값 무시

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) 

를 구성하려고 어디 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} 

그러나 셀러리는 다음 브로커 URL을 여기에 amqp://guest:**@localhost:5672//

에 연결을 계속 시도는 내 애플 리케이션에 다음 값을 설정하고 여기 내거야 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을 인쇄했으며 위에 나열된 셀러리 값을 포함합니다. 스택 오버플로와 비슷한 게시물을보고 아직 내 질문에 대한 답변을 찾지 못했습니다.

내가 파이썬 3.6 셀러리를 사용하고 4.1

는 설정 값을 무시하는 이유

사람이 알고 있나요? 당신은하지 접두사 설정 키 접두사로 혼합하고 최소한의 예를 들어 저장소 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을 전달보다는 그것을 연기하고 나중에 구성을 업데이트해야합니다. 지금

from celery import Celery              

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

그리고, 셀러리 노동자를 실행하면 다음과 산출 :

내가 당신의 app/extensions.py과 같이 수정

bash# celery worker -A app.extensions 

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

이것이 수정 된 것 같습니다. 대단히 감사합니다. 나는 실제로 블로그 기사를 읽었지만 내 실수를 알지 못했다. –

+0

인용 한 게시물이 근본 원인에 대한 설명이없고 실망 스럽지만 실망 스럽다. – georgexsh

0

에 대한 링크가 있습니다 나는 celery docs을 확인하고 난 내가 설정 여기

에 맞는 값을 사용하고 생각합니다.

접두어 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')'? –