用Gunicorn运行Django - 最佳实践

Ste*_*ano 33 django gunicorn

使用gunicorn运行django应用程序有3种方法:

  1. 标准gunicorn+ wsgi(参考django doc)

    gunicorn project.wsgi:application

  2. 使用gunicorn django集成(ref gunicorn docdjango doc):

    python manage.py run_gunicorn

  3. 使用gunicorn_django命令(ref gunicorn doc)

    gunicorn_django [OPTIONS] [SETTINGS_PATH]

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

有没有最好的方法来运行带有gunicorn的django应用程序,这些不同的解决方案有哪些可预见的优点/缺点?

看一下gunicorn的代码看起来他们几乎都是这样做的:2.似乎是使用django的内部创建一个wsgi应用程序,而3.使用2.

如果是这样的话,我甚至不明白不仅仅使用"1"的原因是什么.所有的时间,特别是因为wsgi.py自django 1.4 以来文件被自动处理; 如果这是真的可能只是建议文件改进...

此外,与django的gunicorn设置的最佳实践将是伟大的.使用1.,在wsgi文件中设置一些默认值并避免其他设置是否有意义?

参考文献:

  1. 我应该使用django-gunicorn集成还是wsgi?只涉及选择1.和3.,没有提示设置,答案没有理由
  2. 使用gunicorn和nginx部署Django会提供更广泛的信息,但不是严格相关的,也不回答这个问题
  3. Django Gunicorn wsgi关于版本"4",这是启动gunicorn -c configfile和配置文件将指向django_settings到django
  4. Django WSGI和Gunicorn只是有点混乱:)混合1.和3.当然wsgi.py只用1.

Ste*_*ano 34

退房后我会说最好的方法是使用gunicorn+wsgi

$ gunicorn project.wsgi:application
Run Code Online (Sandbox Code Playgroud)

它现在都在gunicorn docs中得到证实:如果你运行Django 1.4或更新版本,强烈建议只使用gunicorn命令上面链接的 django 使用WSGI接口运行你的应用程序.

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

关于设置

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

单线解决方案,不需要Carl的评论中的任何新文件:

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

听起来像一个更好的方式(虽然我可能最终会在一些shell命令中写它,以便"记住").

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

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

目前,只有Paster应用程序可以访问特定于框架的设置.如果您有为WSGI应用程序提供设置或从Django的settings.py中提取信息的想法,请随时打开一个问题告诉我们.

(更新:没有找到任何更聪明的方法,但毕竟env变量足以满足我最常见的情况).

  • 只需设置环境变量DJANGO_SETTINGS_MODULE,这是迄今为止最简单的方法.在我的生活中,我从未使用过`--settings`参数来管理`manage.py`,我甚至不确定它应该存在.如果需要,甚至可以在单个命令行中设置env var,例如`DJANGO_SETTINGS_MODULE = project.settings.prod gunicorn project.wsgi:application` (6认同)