2012-11-29 44 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訪問已經被芹菜解析的參數時,這有點不對勁 –