我有 4 个 EC2 服务器运行带有 uWSGI 的 Django 1.3.2 应用程序。他们都在 Amazon RDS 上共享一个 MySQL 服务器。我遇到了一些行为,如果通过管理员创建了新对象,我尝试:
get_object_or_404(Class, pk=new_object.pk)
有时它会找到一个对象,但有时它会返回 404。
会发生什么?
这就是我使用 get_object_or_404 的方式:
# Module level variables
if settings.DEBUG:
articles = News.objects.filter(status='live')
else:
articles = News.objects.all()
dev view(request, slug):
article = get_object_or_404(articles, slug=slug)
....
如果我重新启动所有 uWSGI 进程,问题就会消失。
我尝试过的问题和事情:
- 模块级变量是问题吗?我试图调试这个,但由于查询集是懒惰的,它似乎不是问题。
- 是缓存问题吗?我已经重新启动了 memcache 并清除了 Nginx 的缓存,但问题仍然存在。
- 是RDS的问题吗?我还没有找到这个问题的答案。
- 是查询集缓存问题吗?我还没有找到这个问题的答案,也不知道如何。
一切都在单个服务器上按预期工作,但是一旦有多个服务器,我就会开始体验这种行为。