2014-02-18 42 views
4

我開始用芹菜今天3.1.9 Django的。這個新版本有Django的是,就不再需要使用Django的芹菜更緊密的集成。芹菜3.1.9 Django的一體化,指定設置文件,而無需使用djcelery

我使用多個設置文件,我想知道是否有一個簡單的方法來指定初始化celery worker時使用哪個設置文件?

隨着djcelery這是很簡單的,因爲它使用manage.py命令。

我天真地想檢查是否

settings.DEBUG是在celery.py文件真實的,但當然是失敗,因爲這些設置都沒有裝!

下一步就是潛入Django的芹菜源和模仿他們在做什麼,但在此之前,我希望有人已經找到了實現這一目標的一個簡單的方法?

謝謝

+0

您是否閱讀過Django入門?自從django-芹菜被使用以來,它已經發生了變化。 http://celery.readthedocs.org/en/latest/django/first-steps-with-django.html – olofom

+2

@oloform:是的,文檔只解釋如何設置,當你有一個設置文件。 – Bentley4

回答

5

解決方案是使用環境變量。

celery.py

代替

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings') 

使用

os.environ.setdefault('DJANGO_SETTINGS_MODULE', '{0}'.format(get_env_setting('DJANGO_SETTINGS_MODULE'))) 

隨着get_env_setting定義爲:

from os import environ 
from django.core.exceptions import ImproperlyConfigured 

# https://github.com/twoscoops/django-twoscoops-project/blob/develop/project_name/project_name/settings/production.py#L14-L21 
def get_env_setting(setting): 
    """ Get the environment setting or return exception """ 
    try: 
     return environ[setting] 
    except KeyError: 
     error_msg = "Set the %s env variable" % setting 
     raise ImproperlyConfigured(error_msg) 

你可以把在你的settings.base.py例如。

然後設置DJANGO_SETTINGS_MODULE環境變量的每個環境。例如。在生產環境中將其設置爲my_project.settings.production。此變量可以通過添加下面的行由永久設置爲〜/ .bashrc中:

export DJANGO_SETTINGS_MODULE=my_project.settings.production 
+0

這個解決方案不適用於我,它引發錯誤'django.core.exceptions.ImproperlyConfigured:設置DJANGO_SETTINGS_MODULE env變量' –

+0

好像你沒有設置DJANGO_SETTINGS_MODULE環境變量(指向你的設置模塊)。此外,這只是一個實現的想法,這個想法是關於使用環境變量來決定要加載的設置模塊。 – Bentley4

0

當初始化命令行上的芹菜工人,只是設置環境變量之前芹菜命令。

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