我创建了一个生产设置.py
,其中放置了所有生产环境变量和值,例如:
import dj_database_url
DATABASES['default'] = dj_database_url.config()
我想我应该声明一个环境变量,例如
MYPROJECT_生产
并将其设置为
heroku config:add MYPROJECT_PRODUCTION=True
或导出 MYPROJECT_PRODUCTION=True
在settings.py(这是django默认创建的)中,我想我应该在文件末尾添加
import os
if os.environ.has_key('MYPROJECT_PRODUCTION') and os.environ.get('MYPROJECT_PRODUCTION')=='True':
from production_settings import *
这是正确的做法吗?
尝试 python 管理 shell
时遇到导入错误
export DJANGO_SETTINGS_MODULE='myproject.settings'
export MYPROJECT_PRODUCTION=True
me@ubuntu:~/dev/python/django/myproject$ python manage.py shell
Error: Can't find the file 'settings.py' in the directory containing 'manage.py'. It appears you've customized things.
You'll have to run django-admin.py, passing it your settings module.
(If the file settings.py does indeed exist, it's causing an ImportError somehow.)
manage.py 与 settings.py 存在于同一文件夹中..仍然出现错误。
我检查了echo $MYPROJECT_PRODUCTION
,它输出True
最佳答案
就个人而言,我将生产设置保留在 settings.py
中,然后包含一个 local_settings.py
文件(使用 .hgignore 将其排除在版本控制之外)。
我将以下内容添加到settings.py的末尾
try:
from local_settings import *
except ImportError, e:
pass
然后在我的 local_settings.py 中覆盖适当的设置 -
DEBUG = True
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'tag',
'USER': 'tag',
'PASSWORD': 'tag',
'HOST': 'localhost',
'PORT': '5432',
}
}
我的印象是这是一个相当常用的方法(我从同事那里学到了它,但我也看到过它的博客)
编辑
为了回应 balazs 非常好的观点,您可能会包含此方法的变体,以保持敏感数据的私密性。也许在 local_settings
导入后包含以下内容 -
try:
from production_settings import *
except ImportError, e:
pass
然后从版本控制中排除 product_settings.py
。我想您可能需要使用不同的方法来部署 product_settings.py
,但我认为这没什么大不了的。
关于python - Django 项目的生产设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14452663/