【问题标题】:Disable Apache caching of python files禁用 python 文件的 Apache 缓存
【发布时间】:2012-09-22 05:22:02
【问题描述】:

我正在使用 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()

【问题讨论】:

  • 你是用 git 还是 hg 来管理源代码?

标签: python django apache caching


【解决方案1】:

如何解决您的“字节码问题”

您可能应该首先弄清楚为什么那些不需要的.pyc 文件存在(这些在您的存储库中吗?它们应该被忽略)。

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


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

如何解决 Apache 看似拉取旧版本代码的问题。

现在,您必须在这里解决两个问题。

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

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

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

  • 上传新代码时重新启动 apache。使用apache2ctl -k graceful,这将对您的用户透明,我不明白为什么“服务器重启可能是一个问题”,除非您使用共享主机。
  • 使用代码重新加载,您可能需要have a look at the mod_wsgi 文档。

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

【讨论】:

  • 那么您是否建议我应该从我的存储库和连接到该存储库的本地文件夹中删除这些文件?我不知道它们为什么会出现 - 这些问题一开始出现,我就注意到了它们。
  • 我的意思是那些.pyc 文件不应该在存储库中。当代码用完.py 文件时,它们将即时生成。然而,确实,一个不需要的.pyc 文件在生成它的.py 文件被删除后可能会留在您的树中并导致问题(例如您正在将文件转换为模块)。您可以在拉取更改后添加清除树作为步骤 - 必要的 .pyc 文件将自动重新创建。
  • 好吧,我从本地文件夹、存储库、测试服务器文件夹中删除了所有 .pyc 文件并重新启动了 apache。问题仍然存在。
  • 但真正的问题是什么?
  • 每次刷新页面都会出现不同的错误。我确定这些错误已修复。这是一个示例:我(有意)在视图末尾省略了 HttpResponse 。我提交了更改,修复并再次提交(我一直在测试服务器上进行 svn up)。现在该错误不应再次出现,但由于某种原因它确实会出现。
猜你喜欢
  • 2018-10-05
  • 1970-01-01
  • 2014-05-18
  • 1970-01-01
  • 2011-03-11
  • 2020-10-28
  • 2012-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多