2012-10-01 62 views
3

我正在與django合作,並在做需要測試服務器的Facebook集成。我在Apache和緩存.pyc文件方面遇到了很多問題,我甚至還有asked here on stackoverflow禁用Apache緩存python文件

該解決方案的工作原理,但我想知道是否有一個選項來禁用Apache緩存這樣的文件。服務器重啓對我來說可能是個問題。

編輯:

這裏是django.wsgi代碼:

path = '/not/actual/path' 
if path not in sys.path: 
    sys.path.append(path) 

os.environ['DJANGO_SETTINGS_MODULE'] = 'notactualproj.settings' 

import django.core.handlers.wsgi 
application = django.core.handlers.wsgi.WSGIHandler() 
+0

您是否使用git或hg進行源代碼管理? – arulmr

+0

我正在使用SVN,爲什麼? – dark4p

回答

7

如何解決你的「字節碼的問題」

你或許應該明白,爲什麼那些不需要.pyc文件都在那裏第一個地方(這些在您的存儲庫?他們應該被忽略)。

正如mentionned的意見,如果你已經晃來晃去.pyc文件造成的問題,你可以結合刪除所有.pyc文件,當您部署新代碼與服務器的拉過程的一部分。運行應用程序將重新創建模塊導入時所需的應用程序。


現在,如果你真的不希望有生成的字節碼,你可以使用the PYTHONDONTWRITEBYTECODE environment variable,但我不會建議,因爲它似乎相當過分的解決方案。

如何解決Apache看似拉老版本的代碼。

現在,你必須在這裏玩兩個問題的區別。通過蟒產生(例如.pyc文件)

  • 舊版字節碼文件,這可導致在特定情況下的問題像一個模塊更換文件,但並不常常引起人們的關注。
  • Mod WSGI不重新加載上傳的新代碼。這取決於你運行Mod WSGi的模式,而一個常見的症狀是打到一個頁面似乎隨機抽取更新或更舊版本的代碼。

要解決第一個問題,您只需刪除未使用的字節碼文件。但是,再次,這可能不是什麼導致你的問題。

爲了解決第二個問題,有兩種解決方法

  • 重啓動Apache,當你上傳新的代碼。使用apache2ctl -k graceful,這對用戶是透明的,我不明白爲什麼「服務器重啓可能是一個問題」,除非你在共享主機上。
  • 使用代碼重新加載,您可能需要have a look at the mod_wsgi文檔。

我不認爲字節碼是你的問題,代碼重新加載可能是。

+0

那麼你是否建議我應該從我的回購庫和連接到該回購庫的本地文件夾中刪除這些文件?我不知道他們爲什麼在那裏 - 一旦出現這些問題,我就會注意到他們。 – dark4p

+0

我的意思是這些'.pyc'文件不應該在存儲庫本身。當代碼運行'.py'文件時,它們將在運行中生成。然而,事實是,一個不需要的'.pyc'文件可能會在它生成的'.py'文件被移除並導致問題(例如將文件轉換爲模塊)之後留在您的樹中。您可以在更改後添加清除樹的步驟 - 必要的'.pyc'文件將自動重新創建。 –

+0

那麼我刪除了我的本地文件夾,回購,測試服務器文件夾中的所有'.pyc'文件並重新啓動apache。問題仍然存在。 – dark4p