2012-11-29 57 views
1

美好的一天。用.conf文件配置芹菜

我建立了一个名为myproject-celery的独立项目。这是一个基于buildout的项目,它包含我的项目的异步部分。为了方便起见,我想要一个文件,它将包含这台机器的配置。我知道芹菜提供了python的配置文件,但我不像这样的配置风格。

比方说,我在myproject.yaml名为YAML配置文件配置

我想达到的目标:

./bin/celery worker --config /absolute/path/to/project/myproject.yaml --app myproject.celery 

真正的问题是,我想指定文件的位置,因为它可以改变。我尝试编写一个自定义的加载器类,但是我失败了,因为我甚至不知道为什么以及何时调用了这个类的许多自定义方法(我找到的唯一文档是http://docs.celeryproject.org/en/latest/reference/celery.loaders.base.html?highlight=loader#id1,这对我没有帮助)。我尝试在应用程序模块的导入阶段执行某些操作,但无法将文件路径传递给该模块的代码...我想出的唯一解决方案是使用自定义ENV参数来包含路径,但我确实不明白为什么不能成为像大多数应用程序的启动参数,我使用(指金字塔与它的贴纸服务myproject.ini)

所以问题: 10我需要做些什么来设置我可以通过绝对路径指定一个文件的配置?

编辑: 这个问题没有回答,母猪我在芹菜的github上发布了一个问题。将等待回应。 https://github.com/celery/celery/issues/1100

回答

0

看着celery.loaders.base它看起来像你想覆盖的方法是read_configuration

from celery.datastructures import DictAttr 
from celery.loaders.base import BaseLoader 


class YAMLLoader(BaseLoader): 
    def read_configuration(): 
     # Load YAML file here and return a DictAttr instance 
+0

我想过这个问题,但我真的想提供一个** **绝对的文件的位置。我真的觉得做一个相对于项目配置搜索会很糟糕。 –

+0

@TarasVoynarovsky - 没有理由必须进行相对配置搜索 - 你可以从'sys.argv'中取得路径到你的配置文件:-) –

+0

因为我记得芹菜配置系统不允许我添加自定义参数。它表示该选项不受支持。嗯。那么我可以直接访问sys.argv并查找--config参数,但是当你直接通过sys.argv访问已经被芹菜解析的参数时,这有点不对劲 –