0

我们有一个使用(werkzeug、jinja2 和 MongoEngine)构建的 python MVC Web 应用程序。

在生产中,我们在 nginx 负载均衡器后面设置了 4 个 nginx 服务器。所有 4 个服务器共享一个公共的 Mongo 服务器、一个 Redis 服务器和一个 Sphinx 服务器。我们在 nginx 和应用程序之间使用 uwsgi。

现在来看看这个奇怪的案例。

一旦我们部署了一个新代码,我们就会做一个 touch xyz.wsgi。几个小时后,一切看起来都很好。但在那之后我们随机得到错误。

 'module' object is not callable

我之前在其他 python 开发场景中看到过这个错误。但这次让我感到困惑的是完全随机的行为。

例如example.com/multimedia?keywords=sdf&s=title&c=21830

如果我们刷新错误就消失了。为任何参数尝试另一个值,如“keywords=xzy”,它又出现了。刷新它不见了。

那个“多媒体”模块是我们最近才做的。所以我们可以假设它的根本原因。但是为什么错误会随机发生?

我的假设是,它可能与 nginx 缓存或 pyc/pyo 的存在有关?一个非法的全局变量可能是原因吗?

各位高手能否帮帮我。

4

1 回答 1

0

该错误可能是随机发生的,因为它是您的代码中的运行时错误。也就是说,在用户以正确的条件访问您的站点以遵循导致此错误的代码路径之前,它不会被触发。

这不太可能是 nginx 缓存问题。如果它正在缓存它,那么它可能会一遍又一遍地返回相同的结果,而不是在重新加载时改变。

但是,您可以通过删除 nginx 并直接针对 werkzeug 进行测试来测试这一点。针对它运行请求,看看您是否看到相同的行为。除非你能证明底层系统按照你期望的方式工作,否则调试 Nginx 是没有用的。

在您的代码中搜索 30 秒可能也是值得的module(),因为这是对该错误消息的最直接解释。

于 2014-11-21T06:01:14.530 回答