首页 > 解决方案 > 如何在服务器上自动加载视图集类中的数据?

问题描述

我在 EC2、Ubuntu18.04、nginx 上运行了后端 Django 项目。基本上,当我通过运行“python manage.py runserver”在本地测试项目时,我可以看到我想要生成的矩阵在服务器准备好之前加载。但是,在我将它部署到服务器上之后,它返回了视图没有名为“矩阵”的属性的错误。

我在本地尝试过,我可以看到我的打印,以便它真正生成矩阵。但是,我无法像在本地那样调试项目,因为我通过设置 .conf 文件自动运行项目。

module 'test.views' has no attribute 'matrix'

class CreateMatrixViewSet(viewsets.ModelViewSet):
    serializer_class = MatrixSerializer
    queryset = Matrix.objects.all()

    print("start creating ls_frame")
    global ls_frame
    ls_frame = read_frame(queryset)
    print("end creating ls_frame")
    print("start creating matrix")
    global matrix
    matrix = generateMatrix(ls_frame)
    print("end creating matrix")
    http_method_names = ['post']

    def create(self, request):
        ...

我假设在服务器上运行时,它不会进行初始加载。所以如果我想在服务器准备好之前生成一些东西,我应该怎么做?

标签: pythondjangonginxamazon-ec2django-rest-framework

解决方案


这段代码有很多问题,我看不出它在本地是如何工作的。要将变量标记为全局变量,您需要首先在模块级别实际定义它。但是你永远不应该在像 Django 这样的多用户环境中使用全局变量;当然不是作为类属性,这根本没有意义。

问题的根源是无论如何都试图在类级别运行代码。再一次,这没有任何意义。我不明白你为什么要跑在read_frame那里generateMatrix;你应该在一个方法中运行它们(我不能告诉你什么方法,因为我不知道你想对结果做什么。)


推荐阅读