python - Heroku Django 在生产过程中如何获取设置文件?多种设置
问题描述
这是我第一次部署,所以我只想确保我理解。
基本上,heroku django 在部署时如何确定选择哪个设置文件?我可以输入任何命令来检查它当前使用的设置文件吗?就像它的产品或开发一样。
^^ 要自己回答上述问题,您在 wsgi 文件和 heroku config:set DJANGO_SETTINGS_MODULE=mysite.settings.prod 中设置 myproject.settings.prod 来告诉它为生产/部署选择您的 prod 设置。我的理解正确吗?提前致谢。任何建议或反馈将不胜感激!
解决方案
是的,您提出的答案在逻辑上是正确的,但可能行不通。
更改您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 中设置它。
推荐阅读
- c - 试图从用户那里读取一个句子并写入文本文件
- python - 并行化 groupby:将函数同时应用于 groupby 对象
- amazon-web-services - 如何在使用 aws cdk 创建自动缩放组时选择固定的 aws linux 映像机器?
- php - URI https://www.googleapis.com/oauth2/v4/token 的连接被拒绝
- unit-testing - 为什么 Spock 不记录由间谍对象的方法完成的调用?
- debugging - 在某些情况下,Xdebug 2.9.8 不会在 NetBeans 8.1 中的断点处中断
- java - 了解 Java 中的锁用法
- mysql - MYSQL VIEW 在多个表?
- spring - freemarker中的utf-8字母
- rust - Rust TcpStream write/write_all 令人困惑的行为