13

virtualenv内で実行されているDjango1.3アプリケーションとgunicorn0.12.1で、一貫性のないコードの再読み込み動作が発生しています。

特定のgunicornプロセスPIDを再起動しても、Gunicornはアプリケーションを正しくリロードしません。基本を実行する場合runserver(Djangoを介して、manage.pyコマンドを介して)、これは問題ではありません。

virtualenvを削除して再作成すると、gunicornは新しいコードで期待どおりに実行されます。

Pythonキャッシュか何かがありますか?また、すべての*.pycファイルを削除しようとしました。

4

2 に答える 2

6

これを試して:

$ kill -HUP masterpid

また、次の投稿の下部にあるいくつかのメモもご覧ください。

于 2011-04-28T02:03:11.020 に答える
4

私もこの問題のバリエーションに遭遇しました-Pokomy氏がリンクした記事でアドバイスされているように、シグナルでgunicornマスタープロセスを強制終了するとうまくいくHUPようです。

watchdogPythonモジュールを使用すると、ファイル保存時に自動リロードを簡単に設定できます。セットアップは実際には一目瞭然なので、開発用の Supervisord.conf ファイルの抜粋を次に示します。

[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)

(NB、実際にはconfファイルにない改行の前にそのサンプルにスラッシュを入れました-読みやすくするためにこれらの改行を挿入しました;それがIRLで機能するかどうかはわかりません)

最初のプログラムは gunicorn プロセスです。Werkzeug デバッガーを使用するために、開発中にシングル スレッドで実行します。2 番目の部分は興味深い点です。このコマンドは、「ファイルのサフィックスがこのリストのいずれかと一致する場合、このディレクトリ ツリー内のファイルに変更があるたびに、gunicorn PID ファイルで指定されたプロセスを強制終了します」と述べています。

私を含む多くの人にとって魅力のように機能します。知らない場合watchdogは、非常に便利で、一見の価値があります。

于 2012-05-21T21:50:17.510 に答える