9

Django アプリを開発し、付属のテスト サーバーを使用する場合import pdb; pdb.set_trace()、コードの任意の場所に を追加するだけで、対話型デバッガーに入るブレーク ポイントを設定できます。明確にするために、IDE を使用するという意味ではなく、VM またはリモート開発サーバーへの ssh 接続を簡単にセットアップするだけです。

WSGI Django アプリで同様の動作を得るにはどうすればよいですか? (繰り返しますが、想定されるセットアップは、サーバーへのsshセッションを使用したものです-VMまたはリモート)

4

2 に答える 2

9

私の知る限りでは、任意の wsgi アプリで pdb を使用する場合、最善の策はrpdb2を使用することです。

(Apache を使用する Django についてmod_wsgiは、このガイドを参照できます: http://code.google.com/p/modwsgi/wiki/DebuggingTechniques )

于 2012-11-01T10:03:02.663 に答える
0

問題は、WSGI サーバーが複数のプロセスを使用し、標準ストリーム (in、out、および) をデタッチまたはリダイレクトすることです。すべてを揺さぶるエラー。

Apache httpd および mod_wsgi の場合:

  • で始まりapachectl -X、not apachectl start(norservice apache2 startなど)
  • WSGIDaemonProcessWSGIProcessGroupなどは使用しないでください。デーモンのプロパティを置き換えるために、、などを
    追加する必要がある場合があります。WSGIPythonHomeWSGIPythonPath

同様に、gunicorn の場合は、設定debug=Truedaemon=False.


mod_wsgi ガイドでは、すべてのリクエストの開始時に pdb を呼び出すクラスでラップwsgi.applicationすることを推奨していますが、他のトラップは機能するはずです。

class Debugger:
    def __init__(self, object):
        self.__object = object

    def __call__(self, *args, **kwargs):
        import pdb, sys
        debugger = pdb.Pdb()
        debugger.use_rawinput = 0
        debugger.reset()
        sys.settrace(debugger.trace_dispatch)
        try:
            return self.__object(*args, **kwargs)
        finally:
            debugger.quitting = 1
           sys.settrace(None)

application = Debugger(application)
于 2018-05-16T12:02:56.680 に答える