繁体   English   中英

来自Celery worker的Active Django设置文件

[英]Active Django settings file from Celery worker

所以我已经为此寻找了很多,但找不到一个好的答案。 我正在使用Celery 3.1.7和Django 1.5.1。,没有django-celery包,因为较新版本的Celery不再需要它。 我设法使用RabbitMQ设置任务并执行它们。 一切都在应有的地方。 但是,我正在将它整合到一个现有的,相当大的Django项目中。 在那里我们指定了几个Django设置文件,而不仅仅是一个。 我们根据环境运行不同的,例如一个用于本地机器,一个用于服务器。 我的问题是,我似乎无法从芹菜工作者中追踪哪个设置文件是“活动的”,芹菜工作者在我的项目根目录中运行celery.py文件(如文档所指定)。 那里的文档需要指定Django设置文件,如下所示:

os.environ.setdefault('DJANGO_SETTINGS_MODULE', "project.settings.server")

现在这个工作,但如果我在本地移动东西我需要将其更改为settings.local以使其工作,并且每次都这样。 像在标准Django文件中那样在运行时读取设置对象不起作用,因为芹菜工作者在不同的进程中执行。 那么,使用这种情况,有没有人知道如何从芹菜工人动态获取活动的Django设置文件? 或者也许在启动芹菜工人时将其作为变量传递? (比如Django等--settings = project.settings.local)谢谢!

在命令行初始化celery worker时,只需在celery命令之前设置环境变量。

DJANGO_SETTINGS_MODULE='proj.settings' celery -A proj worker -l info

一个想法可能是让Django每次加载正确的设置文件,让芹菜使用Django使用的那个。 这就是我在做的方式。

假设你有项目结构:

project/
    proj/
        settings.py
        urls.py
        ...

用。。。来代替

project/
    proj/
        settings/
            __init__.py
            local.py
            production.py
            common_settings.py
            ...
        urls.py
        ...

让common_settings.py成为所有环境之间共享的所有设置,并让你的init .py加载应该使用的配置。

# __init__.py:

from common_settings import *

# A check for environment variable, hostname, etc:
# Example for checking hostname:
from platform import node
if node() in ['dev1', 'dev2']:
    from local import *
elif node() in ['prod1', 'prod2']:
    from production import *

现在,您始终可以依赖project.proj.settings作为您环境的正确设置文件。

setdefault()返回系统环境中变量的值。 仅当未定义DJANGO_SETTINGS_MODULE它才会返回"project.settings.server"

因此,我会将最常用的设置模块留在那里,并在需要时通过显式声明环境变量来更改它:

即本地开发,virtualenv钩子, .bashrc ,手动等:

export DJANGO_SETTINGS_MODULE=project.settings.local

发现这个埋在芹菜文件中:

# project/app/tasks.py
app = Celery()
app.config_from_object('django.conf:settings')

http://celery.readthedocs.org/en/latest/whatsnew-3.1.html#django-supported-out-of-the-box

这将简单地从django设置文件中提取芹菜设置,这通常是您想要的环境分离。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM