2012-11-03 71 views
7

最初我有一個包含測試服務器的Django應用程序。爲了調試這個設置,我可以在代碼中的任何地方添加一個import pdb; pdb.set_trace(),並且有一個突破點將我引入終端中的交互式調試器(在命令行上)。Django Gunicorn調試

最近我轉移到gunicorn獲得一些perf性能。如何在使用此Gunicorn設置時獲得類似的行爲。我試圖通過設置與debug=Truedaemon=False gunicorn設置,但它不起作用。

任何人都有解決方案?

+0

你找出如何使它工作嗎? – duduklein

+0

是的,請閱讀我的答案。這是我現在所做的... –

+0

我設法使用gunicorn和ipdb在一起。請參閱下面的答案。我還建議將超時設置爲更大的值,以便您有時間進行調試。 – duduklein

回答

4

要在反向代理配置在調試器/調試模式下運行綠色麒麟(下nginx的),在PyCharm的運行/ Django的/編輯配置輸入以下設置:

當然,使用任何端口(而不是7777)您已將您的nginx配置爲代理服務器。

Screenshot

+1

什麼使用GUI的Python:D ? – holms

+0

這並沒有真正的幫助。 op想要使用'pdb',而不是PyCharm的GUI進行調試。 – WhyNotHugo

2

如果能夠推出gunicorn在application實例,它是從werkzeugDebuggedApplication類的實例指指點點,你就可以使用WERKZEUG調試器import ipdb; ipdb.set_trace()在瀏覽器中正確設置斷點。

import django.core.handlers.wsgi 
from werkzeug.debug import DebuggedApplication 

application = django.core.handlers.wsgi.WSGIHandler() 
application = DebuggedApplication(application, evalex=True) 

確保你安裝了werkzeug庫和ipdb當然。 (pip install werkzeugpip install ipdb

+0

這不起作用 – duduklein

+0

@ calvin-cheng:不知道這應該如何工作。首先,我應該得到一個未處理的異常,這樣Werzeug回溯調試器在用戶界面(即Web瀏覽器)中變得可見。這樣可行。從他們的UI命令行我調用導入ipdb; ipdb.set_trace()。這導致了一個異常,在我看來,ipdb不喜歡它的控制檯(它似乎是一些HTML *類,它不應該聽起來完全錯誤,當它應該在瀏覽器中工作。) –

0

當我想使用pdb時,我最終做的是運行python manage.py runserver <your_external_IP>:8000

所以你需要在同一臺機器上有兩個不同的存儲庫,一個是在線生產版本(運行gunicorn的版本),另一個是TEST版本,我需要在其中使用pdb進行調試。當TEST版本上的東西看起來很穩定時,我將TEST branchLIVE branch合併。 LIVE branch沒有發展或變化發生這種方式,我避免了合併衝突。

希望這有助於其他人誰是沉迷於pdb

+0

感謝您分享您的解決方案。我很感激。我設法讓它工作,也分享我的。 – duduklein

+2

如果你有https反向代理(例如nginx),這實際上沒有_NOT_工作 – Kimvais

+0

@Kimvais是的,你是正確的。如果你知道如何在存在反向HTTP代理的情況下做到這一點,我有興趣知道設置... –

2

我現在管理與djnago和IPDB使用gunicron。

運行python -m ipdb manage.py run_gunicorn --debug -t 3600

我使用Django 1.4和gunicorn 0.16.1。那麼你通常可以在代碼中使用import ipdb; ipdb.set_trace()werkzeug庫不需要。

我試圖調試Facebook應用程序,所以我不能在開發服務器使用的生成,因爲Facebook試圖使用SSL和開發服務器就不能正確地響應

雖然我一直在尋找對於解決方案,我發現一個帖子pdb: Using the Python debugger in Django,建議一直運行python -m pdb manage.py runserver。雖然這對於django的開發服務器來說不是必需的,但我決定用gunicordn和ipdb來嘗試一下,它工作正常。

3

好,我最近在類似的問題stumbed。我無法應用@dudklein解決方案(我在調試器嘗試輸入時遇到I/O錯誤 - ipdb,pdb等。)

我使用了遠程python debbuger - winpdb和它的embedded debugging

  1. 安裝winpdb在你的virtualenv

    pip install winpdb 
    
  2. 進口和在你的代碼運行的嵌入式調試器:

    import rpdb2 
    rpdb2.start_embedded_debugger('pass') 
    
  3. 運行gunicorn與--timeout參數

    gunicorn -t 3600 env:application 
    
  4. 使用瀏覽器運行正確的視圖例如。 http://127.0.0.1:8000/your-view/

  5. 使用winpdb連接到嵌入式調試器:

    winpdb -a /path/to/django/app/views.py 
    

    它會提示你輸入密碼(使用一個你在你的代碼中設置,在我的例子是「通行證」),並運行很好的圖形界面與調試器。

  6. 如果您需要教程winpdb - here You are

enter image description here