django - 使用 Zappa 部署 Django 应用程序时导入错误?
问题描述
使用 Zappa 将我的 Django 应用程序实例化为 lambda 函数时出现以下错误。
[1549659279288] Instancing..
[1549659279532] cannot import name 'models': ImportError
Traceback (most recent call last):
File "/var/task/handler.py", line 580, in lambda_handler
return LambdaHandler.lambda_handler(event, context)
File "/var/task/handler.py", line 245, in lambda_handler
handler = cls()
File "/var/task/handler.py", line 151, in __init__
wsgi_app_function = get_django_wsgi(self.settings.DJANGO_SETTINGS)
File "/var/task/zappa/ext/django_zappa.py", line 9, in get_django_wsgi
from django.core.wsgi import get_wsgi_application
File "/var/task/django/core/wsgi.py", line 2, in <module>
from django.core.handlers.wsgi import WSGIHandler
File "/var/task/django/core/handlers/wsgi.py", line 8, in <module>
from django.core.handlers import base
File "/var/task/django/core/handlers/base.py", line 7, in <module>
from django.urls import get_resolver, set_urlconf
File "/var/task/django/urls/__init__.py", line 1, in <module>
from .base import (
File "/var/task/django/urls/base.py", line 8, in <module>
from .exceptions import NoReverseMatch, Resolver404
File "/var/task/django/urls/exceptions.py", line 1, in <module>
from django.http import Http404
File "/var/task/django/http/__init__.py", line 5, in <module>
from django.http.response import (
File "/var/task/django/http/response.py", line 13, in <module>
from django.core.serializers.json import DjangoJSONEncoder
File "/var/task/django/core/serializers/__init__.py", line 23, in <module>
from django.core.serializers.base import SerializerDoesNotExist
File "/var/task/django/core/serializers/base.py", line 6, in <module>
from django.db import models
ImportError: cannot import name 'models'
我尝试使用在本地运行该应用程序,
python manage.py runserver
它在本地运行良好。但是,当应用程序部署到 lambda 函数时,出现上述错误。
我正在使用 Django 版本 2.0.10、Python 3.6 以及 AWS Aurora RDS。
我希望 lambda 函数实例以与本地相同的方式没有错误。
解决方案
部署后调用 zappa 以保留打包的 zip 并检查文件夹结构或尝试从该文件夹运行项目。
您是否将 Django 添加到需求文件中?我记得 Zappa 从全新的虚拟环境中重建 lambda 包,安装 requirements.txt 并应用您的文件夹。
或者仔细检查 cloudwatch 日志中的导入错误。只有在部署后刷新容器时才会出现导入错误,而不会出现在每个 lambda 调用中。
推荐阅读
- linux - linux何时刷新tcp发送缓冲区?
- hibernate - 休眠错误删除子记录Grails 4
- machine-learning - 机器学习分类器中的后处理
- python - 什么是基于字符串输入以不同模式执行 Python 函数的干净方法
- c# - 子列表上的 NHibernate 通配符可查询扩展
- javascript - 如何在页面刷新时使用 useSelector
- rest - 哪个 REST 命令用于从有效负载接收数据、对其进行操作并返回结果?
- visual-studio-code - 使用 vscode 比较两个项目
- python - Tkinter 将文本“实时”插入文本框
- maven - 面对 weblogic.application.ModuleException: null Caused By: java.lang.IllegalArgumentException