返回

Django 后端在 Git 中恢复前端更改后冻结:问题排查和解决方案

vue.js

Django 后端在 git 中恢复前端更改后冻结

在使用 Django 和 VueJS 构建的集成项目中,我在恢复前端 Vue 组件的更改后遇到了一个令人困惑的问题。Django 后端服务器无法运行,在系统检查阶段冻结。

症状

  • Django runserver 命令无法完成,在系统检查后冻结。
  • 终端或日志中未显示任何错误。
  • 系统在首次尝试运行服务器后对 Ctrl + Alt + Del 无响应,但在重新启动计算机后恢复。

排查步骤

我确认问题与 Django 模型不一致无关。即使对 Django 视图进行了微小的更改,问题仍然存在:

原始代码:

@api_view(['GET'])
def question_stats_view(request):
    question_ids = request.query_params.getlist('question_ids')
    if not all(q_id.isdigit() for q_id in question_ids):
        return Response({'error': 'Invalid question IDs'}, status=400)

    response_data = [
        QuestionStatsSerializer.get_question_stats(int(q_id))
        for q_id in question_ids if q_id
    ]
    return Response(response_data)

更新后的代码:

@api_view(['GET'])
def question_stats_view(request):
    question_ids = request.query_params.get('question_ids')
    # 分割 ID 字符串并移除空格
    question_ids = [qid.strip() for qid in question_ids.split(',') if qid.strip()]
    print("question_stats_view 日志:", question_ids)

    if not all(q_id.isdigit() for q_id in question_ids):
        return Response({'error': 'Invalid question IDs'}, status=400)

    response_data = [
        QuestionStatsSerializer.get_question_stats(int(q_id))
        for q_id in question_ids if q_id
    ]
    return Response(response_data)

解决方案尝试

重新启动后端后,问题得以解决:

  1. 卸载 XAMPP。
  2. 删除 XAMPP 目录。
  3. 重新安装 XAMPP。
  4. 从备份文件中重新创建数据库。

问题似乎出在 XAMPP(Apache + MariaDB)而不是 Django 应用程序本身,因为即使对 Django 代码库进行最小更改也会出现问题。

潜在原因

我不确定 XAMPP 与 Django 开发服务器之间的具体交互如何导致此问题。以下是我的一些猜测:

  • XAMPP 中的潜在服务或配置冲突。
  • 与 Django 或 VueJS 版本之间的不兼容性。
  • 尚未确定的环境相关问题。

常见问题解答

1. 我使用的是不同的 web 服务器,会遇到类似的问题吗?

可能不会。XAMPP 中的具体设置或与 Django 的交互可能是此问题的原因。

2. 我应该担心服务器冻结吗?

是的,这可能表明 XAMPP 内部或与 Django 的交互存在更深层次的问题。

3. 如何防止此问题再次发生?

尝试更新 XAMPP 和 Django,并确保您的代码不包含任何导致此行为的冲突。

4. 有没有更简单的方法来重新启动 XAMPP?

您可以尝试在命令提示符下运行 xampp_restart.bat(对于 Windows)或 sudo /opt/lampp/lampp restart(对于 Linux)。

5. 我如何排除其他潜在问题?

查看 Django 日志、XAMPP 错误日志并尝试调试 Django 视图以了解具体原因。