使用Gunicorn运行Django-最佳实践
使用gunicorn运行django应用程序有3种方法:使用Gunicorn运行Django-最佳实践,django,gunicorn,Django,Gunicorn,使用gunicorn运行django应用程序有3种方法: 标准gunicorn+wsgi() gunicorn项目。wsgi:application 使用gunicorn django集成(参考和): python manage.py run\u gunicorn 使用gunicorn\u django命令(参考) gunicorn\u django[选项][设置\u路径] Django的文档建议使用1.,它甚至没有作为Gunicorn文档的选项列出 使用gunicorn运行django应用程序
gunicorn
+wsgi
()
gunicorn项目。wsgi:application
python manage.py run\u gunicorn
gunicorn\u django
命令(参考)
gunicorn\u django[选项][设置\u路径]
wsgi.py
文件是为您自动创建的;如果这是真的,也许应该建议对文档进行改进
此外,使用django进行gunicorn设置的最佳实践也会很好。使用1.,在wsgi文件中设置一些默认值并避免其他设置有意义吗
参考资料:
gunicorn-c configfile
,configfile将指向django\u设置wsgi.py
仅与1一起使用gunicorn项目相同。wsgi:application
,但需要将gunicorn添加到已安装的应用程序中,以便django识别run\u gunicorn
命令,因此它可能不是默认方式
使用gunicorn\u django
或多或少是不推荐的,因为文档中还指出…在签出后,我认为最好的方法是使用gunicorn
+wsgi
$ gunicorn project.wsgi:application
现在已经在gunicorn和django的文档中确认了
它还避免了将gunicorn添加为已安装的应用程序,这意味着不需要安装gunicorn来测试您的应用程序,这可能会不时有用
关于设置
要使用的Django设置文件可以通过ENV变量传递,也可以在wsgi.py
文件中自定义。如果我有多个设置(例如多个网站)必须从同一个项目运行,我有时会创建几个wsgi.py
文件,以获取更多信息
一种单行程序解决方案,不需要来自以下位置的任何新文件:
DJANGO\u SETTINGS\u MODULE=project.SETTINGS.prod gunicorn project.wsgi:application
听起来是一种更好的方式(尽管我可能会在一些shell命令中编写它,以便于“记住”)
Gunicorn设置可以作为-c settings\u文件
传递,但我正在探索其他方法,如果找到任何方法,将尝试更新此答案。使用环境变量似乎是一种变通方法,但仅适用于有限的情况
特别是,在django和gunicorn之间获得/共享一些设置会更好;gunicorn的文件说:
目前,只有粘贴程序应用程序可以访问该框架
具体设置。如果您有为WSGI提供设置的想法
应用程序或从Django的settings.py feel中提取信息
自由开放一个问题,让我们知道
(更新:还没有找到任何更聪明的方法,但毕竟对于我最常见的情况,所有的环境变量都足够了)。找到了一个既适用于manage.py(在本地计算机上)又适用于gunicorn的解决方案
创建一个包含所有evniroment内容的文件
# mysite/settings/set_env.py
import os
_environment = os.getenv('environment', None)
if _environment == "production":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings.production")
elif _environment == "development":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings.development")
else:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings.local")
并将此文件导入manage.py和wsgi.py文件中,无需更改gunicorn执行中的任何其他内容根据该文档gunicorn djangoapp。wsgi:application
是一种方法,甚至不需要运行\u gunicorn
;我仍然在试图理解为什么会有3种模式,文档中关于/suggered/way的一个奇怪的注释,以及配置的最佳实践是什么(我可以想象将它的一部分安装在wsgi.py
文件中)。。。谢谢run\u gunicorn
命令现在包含一条关于被弃用和在R21中被删除的警告。这不再是一条路,但我很高兴这个答案存在,它帮助我理解了为什么在2014年将gunicorn
条目添加到INSTALLED\u APPS
中,并确认我现在可以摆脱它。是的,这是最好的办法。其他模式存在的原因是gunicorn是在Django默认项目模板包含正确的WSGI入口点之前创建的,因此,gunicorn开发人员无法假设他们的Django用户会有一个。我不完全清楚您对设置的要求-我认为最好您单独提出一个问题,用一些清晰的例子说明你在想什么样的设置。@CarlMeyer我说的是django设置和gunicorn设置(尽管我承认这不是很清楚,我试着更明确一些)。如果不能够复制可定制的/manage.py run\u gunicorn--settings=settings
,那么很难说启动django实例。特别是,当我有一个运行多个实例的项目(例如django cms上的多个网站)时,我会使用不同的设置。我目前针对django设置的解决方案是将WSGI文件(或设置ENV变量)相乘。只需设置环境变量django_settings_MODULE,这是迄今为止最简单的方法。我