【问题标题】:Gunicorn not reloading a Django applicationGunicorn 没有重新加载 Django 应用程序
【发布时间】:2011-08-10 21:16:06
【问题描述】:

我的代码重新加载行为不一致,Django 1.3 应用程序和 gunicorn 0.12.1 在 vi​​rtualenv 中运行。

Gunicorn 无法正确重新加载我的应用程序,即使重新启动特定的 gunicorn 进程 PID。当我运行基本的 runserver(通过 Django,通过 manage.py 命令)时,这不是问题。

当我删除并重新创建我的 virtualenv 时,gunicorn 使用新代码按预期运行。

是否有 Python 缓存之类的?我还尝试删除所有*.pyc 文件。

【问题讨论】:

    标签: python django virtualenv development-environment gunicorn


    【解决方案1】:

    试试这个:

    $ kill -HUP masterpid
    

    另外,看看following post底部的一些注释。

    【讨论】:

      【解决方案2】:

      我也遇到了这个问题的变体——正如 Pokomy ​​先生链接的文章中所建议的那样,用 HUP 信号杀死 gunicorn 主进程似乎可以解决问题。

      如果您使用 python watchdog 模块,可以轻松设置文件保存时自动重新加载;设置实际上是不言自明的,所以这是我的开发 supervisord.conf 文件中的一个 sn-p:

      [program:ost2]
      autostart=true
      command=/usr/local/share/python/gunicorn --debug\
      -c /Users/fish/Dropbox/ost2/ost2/utils/gunicorn/ost2-debug.py wsgi_debug
      directory=/Users/fish/Dropbox/ost2/ost2
      priority=500
      ; (etc)
      
      [program:ost2-reloader]
      autostart=true
      autorestart=false
      directory=/tmp
      command=/usr/local/share/python/watchmedo shell-command\ 
      --patterns="*.py;*.txt;*.html;*.css;*.less;*.js;*.coffee"\
      -R --command='kill -HUP $(cat /usr/local/gunicorn/gunicorn.pid)'\
      /Users/fish/Dropbox/ost2/ost2/
      priority=996
      ; (etc)
      

      (请注意,我将斜杠放在该示例中实际上不在 conf 文件中的换行符之前——为了便于阅读,我插入了这些换行符;我不确定这是否适用于 IRL)

      第一个程序是 gunicorn 进程,我在开发过程中在单线程中运行,以便使用 Werkzeug 调试器。第二部分是有趣的部分:该命令说,“如果文件的后缀与此列表中的后缀匹配,则只要此目录树中的文件发生更改,就终止 gunicorn PID 文件指定的进程”。

      对包括我在内的许多人来说都是一种魅力。如果您不知道,watchdog 非常有用,值得一看。

      【讨论】:

      • 这很好,如果你使用 supervisor 来管理 gunicorn,你可以将你的 cat 命令替换为: supervisorctl status gunicorn_task_name | sed -e 's/.*pid ([0-9]\{1,5\}).*/\1/g'
      猜你喜欢
      • 2020-10-26
      • 1970-01-01
      • 2022-01-04
      • 2017-04-26
      • 2015-03-06
      • 2016-07-20
      • 2012-05-24
      • 1970-01-01
      • 2014-02-02
      相关资源
      最近更新 更多