首页 > 解决方案 > Heroku Django 在生产过程中如何获取设置文件?多种设置

问题描述

这是我第一次部署,所以我只想确保我理解。

基本上,heroku django 在部署时如何确定选择哪个设置文件?我可以输入任何命令来检查它当前使用的设置文件吗?就像它的产品或开发一样。

^^ 要自己回答上述问题,您在 wsgi 文件和 heroku config:set DJANGO_SETTINGS_MODULE=mysite.settings.prod 中设置 myproject.settings.prod 来告诉它为生产/部署选择您的 prod 设置。我的理解正确吗?提前致谢。任何建议或反馈将不胜感激!

标签: pythonpython-3.xdjangoherokudeployment

解决方案


是的,您提出的答案在逻辑上是正确的,但可能行不通。

更改您wsgi.py的设置 DJANGO_SETTINGS_MODULE; 查看它的运行位置:(为此,您必须在 heroku 中设置环境变量 ENV=Heroku)

import os
from django.core.wsgi import get_wsgi_application

if os.getenv("ENV") == "Heroku":
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'my_app.production_settings')
else:
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'my_app.dev_settings')

application = get_wsgi_application()

您还可以将您的更改manage.py为具有相同的情况,以manage.py runserver方便开发:

import os
import sys


def main():
    """Run administrative tasks."""

    if os.getenv("ENV") == "Heroku":
        os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'my_app.production_settings')
    else:
        os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'my_app.dev_settings')

    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            "available on your PYTHONPATH environment variable? Did you "
            "forget to activate a virtual environment?"
        ) from exc
    execute_from_command_line(sys.argv)


if __name__ == '__main__':
    main()

问:为什么这种方法而不是您的解决方案直接在 heroku 中设置 env 变量?

A:我没有测试过,但是每次重启wsgi.py都会os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'my_app.settings')覆盖DJANGO_SETTINGS_MODULE你在heroku中手动设置的环境变量。因此,您必须在 wsgi.py 中设置它。


推荐阅读