Django 1.11
芹菜 4.0.2
让我们阅读芹菜的教程: http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html#index-0
它说我们应该把这一行放在 celery.py:
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')
即文档说:
您不需要此行,但它使您不必总是传入 芹菜程序的设置模块。
我只是在我的 IDE 中注释了这一行。并在它后面放一个断点。
在调试器中,我检查了:
os.environ.get("DJANGO_SETTINGS_MODULE")='proj.settings'
好吧,键值对已经在 os.environ 中了。
顺便说一下,相同的字符串在 wsgi.py:
os.environ.get("DJANGO_SETTINGS_MODULE")='proj.settings'
当启动项目被执行时,它被django-admin实用程序放置在那里。
因此,将同一字符串加倍绝对违反了 DRY 原则。
顺便说一下,设置可能不存储在 proj.settings 中。但是在settings.local和settings.production(正如Django的Two Scoops所推荐的那样)。
所以,这两个字符串:In celery.py 和 wsgi.py 非常可疑。
您能评论一下: 1. 如果值已经映射到 os.environment 中的键,我们需要它们什么? 2. 如何不违反这里的 DRY 原则,特别是如果我们使用 settings.local 和 settings.production)? 3. 那么,芹菜的文档"总是将设置模块传递给芹菜程序"是什么意思?
- 如果值已经映射到 os.environment 中的键,我们需要它们什么?
如果它已经在settings.py
你不需要再担心它芹菜,这只是提醒你的一种做法。
- 如何不违反这里的 DRY 原则,特别是如果我们使用 settings.local 和 settings.production)?
如果您有settings.local
和settings.prod
,常见的做法是在settings.base
或settings.common
中包含常见设置。因此,所有常见的设置(如BASE_DIR
等)都将进入其中。
- 那么,芹菜的文档"总是将设置模块传递给芹菜程序"是什么意思?
你应该告诉芹菜从os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')
或app.config_from_object('django.conf:settings', namespace='CELERY')
那里获取设置。
如果你做一个,你可以忽略另一个,这就是它的意思。