使用Gunicorn运行Django-最佳实践

使用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运行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应用程序的最佳方式是否有任何最佳实践,以及这些不同解决方案的可预见优势/劣势是什么

    看一眼,他们看起来几乎都是这么做的:2。似乎正在使用django的内部构件创建wsgi应用程序,以及3。使用2

    如果是这样的话,我甚至不明白为什么不一直使用“1”。特别是因为自django 1.4以来,
    wsgi.py
    文件是为您自动创建的;如果这是真的,也许应该建议对文档进行改进

    此外,使用django进行gunicorn设置的最佳实践也会很好。使用1.,在wsgi文件中设置一些默认值并避免其他设置有意义吗

    参考资料:
  • 只涉及选择1。第三,没有关于设置的提示,答案也没有给出任何理由
  • 提供一些更广泛的信息,但不严格相关,也不回答此问题
  • 关于版本“4”,它正在启动
    gunicorn-c configfile
    ,configfile将指向django\u设置
  • 只是有点困惑:)混淆1。三,。当然,
    wsgi.py
    仅与1一起使用
  • 我想使用是最好的方法,也是最简单的方法

    它基本上与usign
    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,这是迄今为止最简单的方法。我