2016-07-05 76 views
0

我有一個使用Gunicorn和Nginx的Django站點。偶爾,我會遇到需要調試的問題。過去,我會關閉Gunicorn和Nginx,轉到我的Django項目目錄並啓動Django開發服務器(「python ./manage.py runserver 0:8000」),然後重新啓動Nginx。然後我可以插入set_trace()命令並執行我的調試。當我解決這個問題時,我會關閉Nginx,然後重新啓動Gunicorn和Nginx。我很確定這是行得通的。Nginx的「破管」當調試Django?

最近,雖然我已經開始有問題了。現在發生的事情是,當我停在斷點時,幾分鐘後,我停下來的網頁將會改變並顯示「404 Not Found」,如果我在調試器中再走一步,我會看到這個錯誤:

- Broken pipe from ('127.0.0.1', 43742) 

這發生在我通過域名訪問的開發,暫存和生產服務器上,例如「web01.example.com」(不是真的例子)。

什麼是在遠程服務器上調試我的Django應用程序的正確方法?

謝謝。

回答

0

我想出了這個問題。首先,我觀察到,當我停在斷點處時,頁面在一分鐘後總是超時,這表明如果Web服務器花了超過60秒的時間響應,則Nginx與Web服務器的連接超時。然後我發現了一個定義這個超時的Nginx proxy_read_timeout directive。然後,它只是改變了超時的長度在我的Nginx的配置文件的問題:

# /etc/nginx/sites-enabled/example.conf 
http { 
    server { 
      ... 
      location @django { 
       ... 
       # Set timeout to 1 hour 
       proxy_read_timeout 3600s; 
       ... 
      } 
      ... 
    } 
} 

一旦你做出這種改變,你需要重裝Nginx的,而不是重新啓動它,爲了這個變化生效。然後,按照上面的指示啓動Django,現在可以在不超時的情況下調試您的Django應用程序。調試完成後,請確保刪除超時設置,再次重新加載Nginx,然後重新啓動Gunicorn。