在apache2+;上部署Django应用程序时出现异常错误;mod_wsgi
在我目前正在开发的应用程序上,我发现了一个奇怪的在apache2+;上部署Django应用程序时出现异常错误;mod_wsgi,django,django-models,Django,Django Models,在我目前正在开发的应用程序上,我发现了一个奇怪的属性错误。我正在使用开发web服务器进行开发,即django工具集的“runserver”命令。然后我决定在apache+mod wsgi上测试这个应用程序,尽管有时可以正常工作,但我还是经常遇到这个错误。所以我认为这段代码一定有问题 所以我决定把它评论出来,看看会发生什么。而且是,它仍然会给我同样的错误(参见第二张图片) 在潜入密码数小时后,我有了一个妙不可言的时刻。所以我想,也许在某个时刻,应用程序中使用的某个django模块正在将模型付诸实
属性错误。我正在使用开发web服务器进行开发,即django工具集的“runserver”命令。然后我决定在apache+mod wsgi上测试这个应用程序,尽管有时可以正常工作,但我还是经常遇到这个错误。所以我认为这段代码一定有问题
所以我决定把它评论出来,看看会发生什么。而且是,它仍然会给我同样的错误(参见第二张图片) 在潜入密码数小时后,我有了一个妙不可言的时刻。所以我想,也许在某个时刻,应用程序中使用的某个django模块正在将模型付诸实施。因为就像我提到的,这个应用程序的用户模型是定制的,并且应用程序至少没有直接使用django.contrib.auth.*
。这是我的怀疑,因为这种错误不是特定于该属性的。有时它会通过这一点,但是在引用其他用户模型属性的其他视图上会出现另一个AttributeError。然后,我注意到错误消息中User的属性是django.contrib.auth.models.User的属性
因此,我决定在python路径上“删除”django.contrib.auth.models,结果显示,我专门使用的一个模块中出现了一个错误django.contrib.messages
。我删除了它,我再也看不到AttributeError了。事实证明,django的消息
模型有一个指向django.contrib.auth.models.User的外键
但随后,我失去了django消息框架的灵活性,尤其是当我在视图上使用它时,它与HttpResponseRedirect一起使用,即无法将有用的消息放入模板的上下文中。或者可能有?:)
更新2(现在非常确定):
是的,我现在非常确定是django.contrib.messages
导致了错误。我尝试在另一个使用自定义用户模型的应用程序上重现错误,即不使用django.contrib.auth.models.User。我启用了django.contrib.messages模块,并产生了基本相同的错误。我想知道为什么这会发生在Apache+mod_wsgi上,而不是django自己的开发服务器上 需要注意的几件事:
- 您确定为用户提供了
get\u by\u type\u和\u id
方法吗
- 您设置的是
password
,而不是密码
(打字错误)
- 我想你必须在第二张截图中缩进第60行
您使用的是哪个django版本?您是如何扩展您的用户模型的?django 1.2.5,该应用程序未使用django的Auth模块中的内置用户模型。它使用的是定制版,但我认为它仍然基于Django自己的auth模块。你为什么要使用这么过时的Django版本?不幸的是,我正在开发的应用程序正在使用它。1。是的,我肯定。2.哦,是的,只是一个打字错误。但我回到了原来的代码。3.是的,太棒了。但就像我说的,我回到了原来的代码。get_by_type_and_id上的AttributeError在我注释掉它并替换为直接调用用户的对象管理器之前就已经显示了。是的,另一个问题。每当您更改应用程序上的某些文件时,是否必须重新启动apache?我认为您不必重新启动apache,但必须重新启动wsgi。哦,您可以这样做吗?我只是直接与apache合作。我遇到wsgi的唯一部分是在虚拟主机配置文件上。如果您查看操作系统中的进程列表,您会注意到一个用于apache,另一个用于wsgi。但是,如果您只启动apache,那么apache似乎加载了wsgi本身,因此您必须重新启动apache。