2012-09-27 18 views
3

這是uwsgi配置:的nginx + uwsgi + Django的,似乎是在uwsgi一些奇怪的緩存,幫我

[uwsgi] 
uid = 500 
listen=200 
master = true 
profiler = true 
processes = 8 
logdate = true 
socket = 127.0.0.1:8000 
module = www.wsgi 
pythonpath = /root/www/ 
pythonpath = /root/www/www 
pidfile = /root/www/www.pid 
daemonize = /root/www/www.log 
enable-threads = true 
memory-report = true 
limit-as = 6048 

這是Nginx的配置:

server{ 
    listen 80; 
    server_name 119.254.35.221;  
    location/{ 
     uwsgi_pass 127.0.0.1:8000; 
     include uwsgi_params; 
    } 
} 

Django的工程確定,但修改後的頁面不能被看到,除非我重新啓動uwsgi。(更重要的是,因爲我配置8工作進程,我可以看到修改後的頁面,當我按ctrl + f5一段時間,似乎只有某些工人可以讀取和響應修改的頁面,但其他人只是顯示舊的,誰緩存舊頁面?我沒有配置任何關於緩存)

我沒有配置django,它可以很好地與「python manager runserver ...」配合使用,但是在使用nginx + uwsgi時有這個問題。

(nginx的和uwsgi都是新安裝的,我敢肯定,沒有其他的ConfigEd這裏..)

+0

這是預期的行爲,Apache(例如。在嵌入式模式下)的行爲相似。 – Tadeck

回答

1

這是正常現象。 uwsgi將不會重新讀取您的代碼,除非您重新啓動它(當您有DEBUG=True時,它不會像runserver那樣工作)。

如果你更新你的代碼後,重啓uwsgi,清除瀏覽器緩存,它仍然並不能反映你的變化,那麼你應該從你的源目錄中刪除*.pyc文件。

我通常使用這樣的:

find . -name "*.pyc" -exec rm {} \; 

粗略地講,.pyc是你的代碼的 「編譯」 版本。如果Python沒有檢測到源代碼的變化,Python會加載這個優化版本。如果你刪除這些文件;那麼它會重新讀取你的源文件。

+0

非常感謝您的幫助!當我開發和調試我的項目時,我應該使用manager.py嗎? –

+0

是的;僅使用uwsgi + nginx進行部署。 'runserver'是專門爲開發而開發的。 –

4
  • uwsgi不會自動重新加載你的代碼,只開發服務器在生產中確實
  • 的runserver是用於調試目的,uwsgi和nginx的生產
  • 您可以通過service uwsgi restart或通過腳本init.d中重啓
  • uwsgi
  • 有更好的方法,通過使用touch-reload

重裝uwsg通常沒有必要清理.pyc文件,它發生Ø只有當文件上的時間戳錯誤時(我在整個carieer中只看過幾次)

+0

我使用'uwsgi-emperor'而不是'uwsgi'守護進程,所以我不得不發佈'sudo service uwsgi-emperor reload'。儘管我選擇使用manage.py runserver來進行開發。因爲它是爲那種用途而建造的。 – ThorSummoner