运行Django与Gunicorn – 最佳实践

有3种方法可以使用枪支运行django应用程序:

>标准武士wsgi(ref django doc)

gunicorn project.wsgi:应用程序
>使用枪支django集成(ref gunicorn docdjango doc):

python manage.py run_gunicorn
>使用gunicorn_django命令(参考gunicorn doc)

gunicorn_django [选项] [SETTINGS_PATH]

Django的文档建议使用1.,甚至没有列出作为Gunicorn文档的选项。

有没有最好的做法,以最好的方式运行一个django应用程序与爆炸声,这些不同的解决方案有哪些优点/缺点?

看到在gunicorn’s code看起来,他们几乎都做同样的事情:2.似乎正在使用django的内部创建一个wsgi应用程序,并使用2。

如果是这样,我甚至不明白什么是不简单地使用“1.”的原因。所有的时间,特别是因为一个wsgi.py文件自动为您自动django 1.4;如果这是真的可能只是文档改进应该建议…

此外,与django的爆米花设置的最佳做法将是巨大的。使用1.,在wsgi文件中设置一些默认值是否有意义,并避免其他设置?

参考文献:

> Should I use django-gunicorn integration or wsgi?只关心选择1.和3.,没有提示设置,答案没有理由
> Deploying Django with gunicorn and nginx给出一些更广泛的信息,但不是严格相关,也不回答这个问题
> Django Gunicorn wsgi关于版本“4”,即启动gunicorn -c configfile和configfile将指向django_settings到django
> Django WSGI and Gunicorn只是有点混乱:)混合1和3.当然wsgi.py只用于1。

最佳答案
检查后,我会说最好的方法是使用gunicorn wsgi

$ gunicorn project.wsgi:application

现在已经在gunicorn docs:if you run Django 1.4 or newer, it’s highly recommended to simply run your application with the WSGI interface using the gunicorn command和django as linked above中得到证实。

它也避免了添加gunicorn作为已安装的应用程序,这意味着不要求安装gunicorn来测试您的应用程序,这可能是不时有用的。

关于设置

要使用的Django设置文件可以通过ENV变量传递,也可以在wsgi.py文件中自定义。如果我有多个设置(例如多个网站)必须从同一个项目运行 – See Django Doc获取更多信息,我有时会创建几个wsgi.py文件。

一个一线解决方案,不需要任何新的文件从Carl’s comment

DJANGO_SETTINGS_MODULE = project.settings.prod gunicorn project.wsgi:application

听起来像一个更好的方式(尽管我可能会最终在一些shell命令中编写它,以便“记住”)。

Gunicorn设置可以通过-c settings_file传递,但是我正在探索其他方法,如果找到任何内容,将尝试更新此答案。使用环境变量似乎是一种工作,但仅限于有限的情况

特别是在django和gunicorn之间获取/分享一些设置是很好的;枪支文件说:

Currently, only Paster applications have access to framework
specific settings. If you have ideas for providing settings to WSGI
applications or pulling information from Django’s settings.py feel
free to open an issue to let us know.

(更新:没有发现任何更聪明的方式,但所有env变量都足以满足我最常见的情况)。

转载注明原文:运行Django与Gunicorn – 最佳实践 - 代码日志