簡體   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