【问题标题】:Heroku Django selecting the settings.pyHeroku Django 选择 settings.py
【发布时间】:2014-03-01 22:54:45
【问题描述】:

我想知道如何为不同的环境选择不同的 settings.py 文件。到目前为止,我想到的是更改manage.py 文件并添加一个配置值,例如stage,它将对应于设置文件名。如下图:

本地主机

heroku config:add STAGE="project.settings.prod"

生产

heroku config:add STAGE="project.settings.prod"

所以而不是基础manage.py

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings.production")

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)

我们会:

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", os.environ['stage'])

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)

这感觉不自然,如果有更好的方法来处理这种情况,我正在寻找更多信息。设置文件夹示例如下:

settings/
    __init__.py
    base.py
    local.py
    staging.py
    test.py
    prod.py

或者有没有办法在 Procfile 中添加--settings 选项?目前我的 Procfile 是:

web: gunicorn project.wsgi

【问题讨论】:

    标签: django heroku


    【解决方案1】:

    不要定义stage环境变量,而是直接定义DJANGO_SETTINGS_MODULE环境变量,使用原manage.py不做修改。

    【讨论】:

    • 我在哪里定义 DJANGO_SETTINGS_MODULE 环境变量?你能包含这个例子的代码吗?
    • 在您定义 stage 变量的完全相同的位置。
    • 但是普通的 manage.py 不会覆盖这一行:os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings")?
    • setdefault 仅设置密钥如果它不存在
    猜你喜欢
    • 2012-09-28
    • 2013-10-05
    • 2015-07-26
    • 2014-03-08
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 2012-04-08
    • 2020-11-08
    相关资源
    最近更新 更多