gpt4 book ai didi

Django:加载 celery 的生产设置

转载 作者:行者123 更新时间:2023-12-01 14:35:35 26 4
gpt4 key购买 nike

我的 Django 项目有多个用于开发、生产和测试的设置文件。我正在使用主管来管理 celery worker 。我的问题是如何根据我所处的环境加载 celery 的设置文件。

最佳答案

通过使用环境变量。假设您在存储库的根目录中有以下设置文件。

  • config.settings.development.py
  • config.settings.production.py
  • ...

  • The recommended way在你的配置中定义你的 celery 实例,如 celery.py模块:
    from __future__ import absolute_import, unicode_literals
    import os
    from celery import Celery

    # set the default Django settings module for the 'celery' program.
    # os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.production')

    app = Celery('proj')

    # Using a string here means the worker doesn't have to serialize
    # the configuration object to child processes.
    # - namespace='CELERY' means all celery-related configuration keys
    # should have a `CELERY_` prefix.
    app.config_from_object('django.conf:settings', namespace='CELERY')

    # Load task modules from all registered Django app configs.
    app.autodiscover_tasks()


    @app.task(bind=True)
    def debug_task(self):
    print('Request: {0!r}'.format(self.request))

    而不是设置 DJANGO_SETTINGS_MODULE模块中的变量(我已将其注释掉)确保在 supervisord 时环境中存在这些变量。已启动。

    要在暂存、测试和生产系统中设置这些变量,您可以执行以下 bash 命令。

    例如。在您的生产系统上:
    $ export DJANGO_SETTINGS_MODULE=config.settings.production
    $ echo $DJANGO_SETTINGS_MODULE

    我还建议您从 .env 加载它们。文件。在我看来那更方便。例如,您可以这样做 python-dotenv .

    更新
    .env文件在您的不同系统上大多是唯一的,并且通常不受源代码/版本控制。我所说的独特是指对于开发,您可能有更详细的 LOG_LEVEL或不同的 SECRET_KEY ,因为您不希望它们出现在源代码管理中,或者希望能够在不修改源文件的情况下调整它们。

    所以,在你的 base.py ( production.pydevelopment.py 正在继承)您可以从文件中加载变量,例如:
    import os
    from dotenv import load_dotenv
    load_dotenv() # .env file has to be in the same directory

    # ...
    import os
    DJANGO_SETTINGS_MODULE = os.getenv("DJANGO_SETTINGS_MODULE")
    print(DJANGO_SETTINGS_MODULE)
    # ...

    我个人不使用该软件包,因为我使用 docker ,它具有定义 .env 的声明方式文件,但上面的代码应该让您了解它是如何工作的。有类似的软件包,如 django-environ书中有特色 Two Scoops of Django .所以我倾向于使用它而不是 python-dotenv ,口味问题。

    关于Django:加载 celery 的生产设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50336688/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com