姜戈。在 Heroku 中使用多个设置文件
Posted
技术标签:
【中文标题】姜戈。在 Heroku 中使用多个设置文件【英文标题】:Django. Using multiple settings files with Heroku 【发布时间】:2014-07-27 02:43:22 【问题描述】:我正在尝试遵循“Two Scoops of Django”一书的建议,虽然这本书非常好,但我认为这部分内容不清楚。 所以,我拆分了我的设置文件并创建了一个这样的文件夹:
settings/
__init__.py
base.py (allmost everything there)
local.py (dev. specific settings)
production.py (settings for Heroku)
大部分设置都在 base.py 文件中
在 local.py 我有这个:
# settings/local.py
from .base import *
DEBUG = True
TEMPLATE_DEBUG = DEBUG
INSTALLED_APPS += ("debug_toolbar", "django_extensions", "south",)
在 production.py 我有这个:
from .base import *
INSTALLED_APPS += ("gunicorn",)
当我在本地运行时:
python manage.py runserver 7000 --settings=appname.settings.local
python manage.py runserver 7000 --settings=appname.settings.production
一切正常。
但是当我将更改推送到 Heroku 时,我得到了日志:
File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/util.py", line 354, in import_app
raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.")
所以,我猜 Heroku 没有找到我的设置文件,我不知道如何解决这个问题(可能很简单)。
Two Scoops of Django 在这里有点讽刺,它写了“平台即服务 - 请参阅第 25.2 节”,然后在该部分中只写了“阅读平台文档”:/
【问题讨论】:
这能解决吗:***.com/questions/22674128/… 【参考方案1】:使用 heroku login 登录 heroku 后,您可以运行以下命令检查您的配置:
heroku config
。
如果您没有看到SECRET_KEY
和DJANGO_SETTINGS_MODULE
,您可以通过运行来设置它们:
heroku config:set SECRET_KEY='secret_key_goes_here'
和
heroku config:set DJANGO_SETTINGS_MODULE=mysite.settings.production
最后,确保您的生产设置文件中包含以下语法:
SECRET_KEY = os.environ['SECRET_KEY']
以上说明适用于以下项目结构
-myproject
-app1
-app2
-mysite
-settings
__init__.py
base.py
dev.py
production.py
-manage.py
-Pipfile
-Procfile
-requirements.txt
【讨论】:
配置后别忘了去掉空格:【参考方案2】:您可以使用环境变量DJANGO_SETTINGS_MODULE
指定默认设置模块:
https://docs.djangoproject.com/en/dev/topics/settings/#envvar-DJANGO_SETTINGS_MODULE
在本地 Linux 机器上:
export DJANGO_SETTINGS_MODULE=settings.local
在 Heroku 上:
heroku config:set DJANGO_SETTINGS_MODULE=settings.production
【讨论】:
嗨,大豆。我这样做了,我还在 wsgi 文件中包含了os.environ.setdefault('DJANGO_SETTINGS_MODULE','appname.settings.production')
,正如我从您发布的文档中了解到的那样。但我收到错误 ImportError: Could not import settings 'settings.production' (它在 sys.path 上吗?设置文件中是否有导入错误?): No module named settings.production : /
@alejoss try export DJANGO_SETTINGS_MODULE=project.settings.local
其中project
是您的项目名称。以上是关于姜戈。在 Heroku 中使用多个设置文件的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Heroku 上使用 Channels 和 Celery 部署 Django?