我一直在开发一个基本的应用程序。现在在部署阶段,很明显我需要本地设置和生产设置。
很高兴知道以下内容:
- 如何最好地处理开发和生产设置。
- 如何将 django-debug-toolbar 等应用仅保留在开发环境中。
- 有关开发和部署设置的任何其他提示和最佳做法。
最佳答案
DJANGO_SETTINGS_MODULE
environment variable控制 Django 将加载哪些设置文件。
因此,您可以为各自的环境创建单独的配置文件(请注意,它们当然可以从单独的“共享设置”文件 import *
)并使用 DJANGO_SETTINGS_MODULE
控制使用哪一个。
方法如下:
如 Django 文档中所述:
The value of DJANGO_SETTINGS_MODULE should be in Python path syntax, e.g. mysite.settings. Note that the settings module should be on the Python import search path.
因此,假设您在源代码库中创建了 myapp/production_settings.py
和 myapp/test_settings.py
。
在这种情况下,您需要分别设置 DJANGO_SETTINGS_MODULE=myapp.production_settings
使用前者,设置 DJANGO_SETTINGS_MODULE=myapp.test_settings
使用后者。
从这里开始,问题归结为设置 DJANGO_SETTINGS_MODULE
环境变量。
使用脚本或 shell 设置 DJANGO_SETTINGS_MODULE
然后,您可以使用引导脚本或进程管理器来加载正确的设置(通过设置环境),或者在启动 Django 之前从 shell 中运行它:export DJANGO_SETTINGS_MODULE=myapp.production_settings
.
请注意,您可以随时从 shell 运行此导出 - 它不需要存在于您的 .bashrc
或任何东西中。
使用进程管理器设置 DJANGO_SETTINGS_MODULE
如果您不喜欢编写设置环境的引导脚本(并且有充分的理由有这种感觉!),我建议您使用流程管理器:
- Supervisor允许您使用 program's
environment
configuration key 将环境变量传递给托管进程. - Honcho (Ruby 的 Foreman 的纯 Python 等价物)允许您在 an "environment" (
.env
) file 中定义环境变量.
最后,请注意您可以利用 PYTHONPATH
变量将设置存储在完全不同的位置(例如,在生产服务器上,将它们存储在 /etc/
)。这允许将配置与应用程序文件分开。您可能想要也可能不想要,这取决于您的应用程序的结构。
关于python - Django:如何管理开发和生产设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10664244/