3

我正在使用 django 并进行 facebook 集成,这需要一个测试服务器。我对 Apache 及其 .pyc 文件的缓存有很多问题,我什至在 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()
4

1 回答 1

7

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

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

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


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

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

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

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

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

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

  • Restarting apache when you upload newer code. Using apache2ctl -k graceful, this will be transparent to your users, and I can't see why "Server restart might be a problem", unless you're on shared hosting.
  • Using code reloading, you might want to have a look at the mod_wsgi documentation.

I don't think bytecode is your issue, and code reloading probably is.

于 2012-10-01T11:02:33.250 回答