首页 > 解决方案 > Celery 忽略代理 URL

问题描述

我指定代理 URL。

def create_app():
    app = Flask(__name__)
    app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///persistent/msr.db"
    app.config["SECRET_KEY"] = "lelsosecret"
    app.config["CELERY_BROKER_URL"] = "amqp://guest:guest@msr:5672"
    app.config["CELERY_RESULT_BACKEND"] = "db+sqlite:///persistent/msr.db"
    app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
    db.init_app(app)
    celery.init_app(app)
    return app

在 extensions.py 中有一些相关的代码。

class FlaskCelery(Celery):
    def __init__(self, *args, **kwargs):
        super(FlaskCelery, self).__init__(*args, **kwargs)
        self.patch_task()
        if "app" in kwargs: self.init_app(kwargs["app"])

    def patch_task(self):
        TaskBase = self.Task
        _celery = self

        class ContextTask(TaskBase):
            abstract = True

            def __call__(self, *args, **kwargs):
                if flask.has_app_context():
                    return TaskBase.__call__(self, *args, **kwargs)
                else:
                    with _celery.app.app_context():
                        return TaskBase.__call__(self, *args, **kwargs)

        self.Task = ContextTask

    def init_app(self, app):
        self.app = app
        self.config_from_object(app.config)

auth = HTTPBasicAuth()
celery = FlaskCelery()
db = SQLAlchemy()

但是,无论我将其更改为什么,Celery 都不会真正设置代理 URL。

Cannot connect to amqp://guest:**@127.0.0.1:5672//: [Errno 111] Connection refused.

Docker Compose 正在运行它,这是真的。但是在 docker 之外执行此操作,我的旧的“根深蒂固”的结构,也从未允许我更改代理 URL。

为什么会这样?

标签: pythonflaskcelery

解决方案


为我设置app.config["BROKER_URL"]而不是app.config["CELERY_BROKER_URL"]切换代理 URL。我不确定为什么这是必要的,或者实际上为什么它甚至完全有效。


推荐阅读