好久没有更新博客了,也是比较忙+懒。2月份租了华为云服务器,但到了6 7月才把网站迁移部署上去。完了也没管它。最近打开网站后台发现了一个奇怪的现象,用户数量和用户信息数量不匹配。我的网站用户系统用了django-allauth库,它的各种框架都定死了,改起来很麻烦,因此我当时写了个信号监听,一旦django-allauth那边创建完之后,就为该新用户创建一个对应的用户信息实例,这样用户可以自由更改头像,昵称等信息。但现在这种情况,就好像信号监听功能被阻止了一样。于是我把代码下载到本地,测试了一下。我发现并没有任何bug,用户创建功能就跟我当初设计的那样。但为啥服务器上就不行呢?我实在没头绪就把具体代码和问题抛给了GPT。但感觉GPT也是模棱两可(主要django搭建的项目太大了,很多又是一环套一环的,如果把所有相关代码给他分析我估计就超出字数限制了,所以只能给他关键部分的代码)。GPT给出了几个可能的方案,最终找到了问题所在。
我的代码中含有两个信号监听代码,一个是监听用户创建,另一个是监听新留言。类似这样的代码:
@receiver(post_save, sender=XXX)
def signal_monitor():
if created:
UserProfile.object.create(...)
我当时图省事,另一个监听器的代码直接复制粘贴的前面一个代码,然后改了变量,但都用的同一个名称(比如都用的signal_monitor),结果可能在服务器上运行的时候就出现冲突了。但我比较好奇的是,为什么本地运行没有问题呢?如果哪位大佬知道具体原因,欢迎留言指导一下。