首页 > 解决方案 > 我的 django 网站在崩溃后停止工作,错误毫无意义

问题描述

我有一个大型 django 3.1 项目,该项目在上周日我最后一次 git push 时正在运行。在那次推动之后,我开始编写一些 bash 部署脚本,并遇到了与测试这些脚本相关的系统崩溃(Ubuntu)(bash 不是我的强项!)。我重新启动了机器,继续工作。我开始对 django 代码进行一些测试,结果发现我的 django 项目中的工作代码以一种非常奇怪的方式被破坏了。

怪异#1 - 进口不工作

在我admin.py的一个应用程序的一个 save_model 函数中,我有这条线,它在周日工作。

obj2.computed_sha256 = image_processing_utils.compute_sha256(f)

我收到一条image_processing_utils未定义的 django 错误消息。但是,在 admin 文件的顶部有一个 import 语句from image_processing import image_processing_utils。我将导入语句复制到上面的行,obj2.computed_sha256 = image_processing_utils.compute_sha256(f)并且 save_model 函数正常工作。

怪异 #2 - 数据库值不正确

我运行了另一个调用信号的admin测试。post_delete我有这些行:

@receiver(post_delete, sender=Face)
def auto_delete_face_metadata(sender, instance, **kwargs):
    # delete the Face metadata when the Face object is deleted
    doc_id = instance.document.document_id
    doc_metadata = DocumentMetaData.objects.filter(document_id=doc_id).first()
    metadata = doc_metadata.metadata

我收到一条错误消息,doc_metadata因此None它无法访问该字段metadata。但是,当我单步执行代码时,它doc_id是正确的 (3056),如果我在同一虚拟环境中的 ./manage.py shell 中运行此代码,则字段元数据就在那里并且具有我期望的值。我还使用 mysql shell 验证了数据是否在数据库中。

>>> from memorabilia.models import DocumentMetaData
>>> DocumentMetaData.objects.get(document_id=3056)
<DocumentMetaData: originals/photo/Rady_Evie_Mary_at_Jackrabbit_Dec_6_2001.tiff>
>>> len(DocumentMetaData.objects.get(document_id=3056).metadata)
15
>>> 

我用周日的代码克隆了我的 git repo 到另一个目录,并使用 Meld 查找克隆的 repo 目录和开发代码之间的差异,除了系统崩溃时我正在处理的部署脚本之外没有任何差异,这些差异是正确的。我使用 Wing Pro 7 作为我的 IDE。我已经重新启动了我的机器,但仍然有同样的问题。

我非常感谢您提供的任何帮助,以弄清楚为什么应该工作的代码没有被破坏。

标记

标签: pythondjango

解决方案


推荐阅读