Django. 在Heroku中使用多个设置文件

23 投票
2 回答
6996 浏览
提问于 2025-04-18 08:48

我正在尝试按照《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节”,然后在那一节里只是写了“阅读平台文档” : /

2 个回答

9

你可以使用环境变量 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
19

在你通过 heroku login 登录到 Heroku 后,可以通过运行 heroku config 来查看你的配置。如果你没有看到 SECRET_KEYDJANGO_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

撰写回答