禁用python文件的Apache缓存

时间:2012-10-01 10:57:10

标签: python django apache caching

我正在使用django并进行facebook集成,这需要一个测试服务器。我在Apache及其.pyc文件缓存方面遇到了很多问题,我甚至asked here on stackoverflow

该解决方案有效,但我想知道是否有禁用此类文件的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()

1 个答案:

答案 0 :(得分:7)

如何解决“字节码问题”

你应该首先找出那些不受欢迎的.pyc文件的原因(这些文件存储在你的存储库中吗?应该忽略它们)。

正如评论中提到的,如果您有悬空.pyc文件导致问题,那么当您将更新的代码部署到服务器时,您可以合并删除所有.pyc文件作为拉取过程的一部分。运行应用程序将重新创建导入模块时所需的应用程序。


现在,如果您真的不想生成字节码,可以使用the PYTHONDONTWRITEBYTECODE environment variable,但我不建议这样做,因为它似乎是一个非常过分的解决方案。

如何解决Apache似乎拉动旧版本的代码。

现在,你必须在这里解决两个问题之间的区别。

  • python生成的较旧的字节码文件(例如.pyc文件),这可能会在特定情况下导致问题,例如用模块替换文件,但通常不会引起关注。
  • Mod WSGI没有重新加载上传的新代码。这取决于您运行Mod WSGi的模式,通常的症状是命中页面似乎随机拉动了较新或较旧版本的代码。

要解决第一个问题,您只需删除未使用的字节码文件即可。但是,再次,这可能不是导致你的问题的原因。

要解决第二个问题,您有两个解决方案

  • 上传较新代码时重新启动apache。使用apache2ctl -k graceful,这对您的用户来说是透明的,我无法理解为什么“服务器重启可能会出现问题”,除非您正在共享托管。
  • 使用代码重新加载,您可能需要have a look at the mod_wsgi文档。

我不认为字节码是你的问题,代码重新加载可能是。