celary.py 和 wsgi.py: os.environ.get( "DJANGO_SETTINGS_MODULE" )='proj.settings'



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. 那么,芹菜的文档"总是将设置模块传递给芹菜程序"是什么意思?

  1. 如果值已经映射到 os.environment 中的键,我们需要它们什么?

如果它已经在settings.py你不需要再担心它芹菜,这只是提醒你的一种做法。

  1. 如何不违反这里的 DRY 原则,特别是如果我们使用 settings.local 和 settings.production)?

如果您有settings.localsettings.prod,常见的做法是在settings.basesettings.common中包含常见设置。因此,所有常见的设置(如BASE_DIR等)都将进入其中。

  1. 那么,芹菜的文档"总是将设置模块传递给芹菜程序"是什么意思?

你应该告诉芹菜从os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')app.config_from_object('django.conf:settings', namespace='CELERY')那里获取设置。

如果你做一个,你可以忽略另一个,这就是它的意思。

相关内容

最新更新