【问题标题】:How does Heroku handle Django settings?Heroku 如何处理 Django 设置?
【发布时间】:2012-08-27 18:34:53
【问题描述】:

我正在尝试为遵循 Heroku 推荐结构的 Django 应用程序创建一个目录结构,如 page 底部所示。如您所见,他们创建了一个“设置”目录,其中包含各个设置文件(例如 dev.py),这些文件的读取取决于项目部署到的层。

现在我预计会有一个与设置目录相同级别的“settings.py”文件,该文件将从设置目录中的设置文件之一导入。但是,他们的图表没有显示任何这样的“settings.py”文件,只是目录。他们如何在没有顶级 settings.py 文件的情况下执行适当的设置文件?

作为一个实验,我创建了一个与设置目录位于同一级别的 settings.py 文件。问题是当我执行“runserver”时,设置目录中的 init.py 文件会导致错误:“'Settings' object has no 'ROOT_URLCONF'” 我猜有某种名称冲突,因为如果我将设置目录的名称更改为“conf”,我不会收到此错误。

Heroku 的人会不会假设用户正在某处设置 DJANGO_SETTINGS_MODULE?如果没有,他们如何读取正确的设置文件?

谢谢。

【问题讨论】:

    标签: django heroku


    【解决方案1】:

    当 python 是名为 settings 的导入模块时,它会查找名为 settings.py 的文件或名为 settings 并在其中包含 __init__.py 的目录(python 模块)。这就是python模块系统的工作原理。

    从那里,您可以决定在初始化文件中导入哪些设置文件,从内部导入内容,如 proddev。我想这应该在那个页面上的某个地方进行解释,但我一目了然。

    至于 Heroku,它不假设任何东西,并且使用 django 默认值。所以模块settings 正在被导入。

    另外,我不会反对在你的项目 repo 中使用 dev/prod 设置,但是 heroku 为你提供了一个非常好的方法来使用 ENV 变量动态更改配置。您可以在他们的(非常好的)django tutorial 上找到更多信息。

    【讨论】:

    • Dmitry,所以,如果我理解正确,你的意思是我应该删除顶层 settings.py 文件,在同一级别创建一个设置目录,创建 settings/dev .py 和 settings/__init__.py 文件,并在 init 文件中放入语句“from dev import *”?我确实尝试了我刚才描述的内容,然后我能够运行服务器并显示 Django 欢迎页面。谢谢。
    • 罗伯特,没错,你提到的页面显示了设置目录结构。
    猜你喜欢
    • 2012-04-08
    • 1970-01-01
    • 2015-11-12
    • 2012-10-11
    • 2014-06-30
    • 2013-08-04
    • 2018-02-17
    • 2018-11-22
    • 1970-01-01
    相关资源
    最近更新 更多