2011-06-08 89 views
5

我正在開發一個成熟的Django項目,並注意到一些不尋常的事情。當我編輯urls.py時 - 無論是在項目級別還是以下 - Django都會忽略我的更改。對Django忽略的/project/urls.py的更改

調試已打開,所以當我得到404 Django時,它會打印所有嘗試的URL模式。從這裏我看到的URL模式,然後我做了我的更改

同樣,這是不管我編輯/project/urls.py還是/project/sub/urls.py。可以肯定的是,正確包含了子目錄urls.py。

我專注於項目級urls.py,以防萬一。

我可以對urls.py做一個小小的更新或刪除它的所有內容。 404調試信息顯示舊的url模式。

這就好像Django正在查看這些urls.py文件的緩存版本。我應該如何繼續?

+4

你如何運行你的django服務器?你有沒有嘗試重新啓動實例? – 2011-06-08 16:10:52

+0

@亞當我嘗試過,清除了餅乾等。@Shawn偉大的提醒,我會嘗試。 – ram1 2011-06-08 16:14:31

+0

Django的內置服務器(通過'runserver'命令運行)自動檢查代碼的更新。使用任何其他服務器(包括Django的'testserver'),您需要顯式重新加載源代碼。如果您告訴我們您是如何爲您的申請提供服務的,就像Shawn Chin所說的那樣,我們可以就如何實施提供建議! – adamnfish 2011-06-08 16:15:47

回答

10

通過deafult,Django的開發服務器(通過runserver管理命令訪問)將關注你的代碼,並隨時隨地重新加載。如果您使用任何其他服務器(包括Django的testserver命令),這幾乎肯定不是這種情況。

通常,服務器會在啓動時加載應用程序的源代碼。它需要重新加載以獲取代碼的最新副本。如果您使用的是mod_wsgi(可能是Django應用程序中最常用的生產服務器)的Apache,則在您的源代碼樹中的某處會有一個wsgi應用程序文件。按照慣例,這些擴展名有.wsgi,但它可以被命名爲任何東西。這個文件是Apache用來加載你的源文件的,而mod_wsgi(守護進程模式)的一個有用的特性是觸及(改變修改日期)這個文件足以強制服務器清理源代碼。如果您的應用程序有一個可以編輯的wsgi文件,那麼這樣做並重新上傳代碼應該足夠了。該文件可能包含行application = django.core.handlers.wsgi.WSGIHandler()或類似的東西 - 這可能會幫助你

如果你沒有訪問權限或者你找不到任何這樣的文件,你將需要更新的源服務器的管理員,並要求他們更新並重新加載源代碼。在沒有更多信息的情況下向您提供更多建議會非常棘手 - 也許您可以向服務器管理員諮詢更多信息,以便我們能夠提供幫助?

== ==更新

我檢查鏈路上的響應頭您提供的,它看起來像您使用nginx的服務網站。這可能只是另一臺服務器前面的負載均衡器,所以我仍然建議您從系統管理員處獲取更多信息。

+1

謝謝!說得通。很明顯,我們只是使用Nginx來提供靜態內容,所以我運行了'apache2ctl restart',並且urls.py更改正在運行。 – ram1 2011-06-08 19:48:52

+0

優秀!請記住,重新啓動apache會影響它所服務的每個網站,這可能會產生意想不到的副作用。如果您發現wsgi文件(如果您正在努力追蹤該文件,將會在此站點的apache配置中引用該文件),然後觸摸它將優雅地重新加載此應用程序的源代碼。 – adamnfish 2011-06-08 21:46:37

+2

對於Apache部署,最好使用'$ sudo apache2ctl graceful'重新加載最新配置,而不會干擾當前訪問者。 – 2011-06-09 00:48:50