我已经在 AWS Lambda 上托管了一个网站,并正在测试该 API 是否有效。但是当我在网站上运行它时,它给了我错误。
/api/ 处出现 NotSupportedError 确定性 = True 需要 SQLite 3.8.3 或更高版本 请求方式:GET 请求网址:https://2dx7zf9yt5.execute-api.us-east-1.amazonaws.com/dev/api/ Django 版本:4.2.4 异常类型:NotSupportedError 异常值:
确定性 = True 需要 SQLite 3.8.3 或更高版本 异常位置:/var/task/django/db/backends/sqlite3/_functions.py,第 45 行,在寄存器中 期间引发:blog_api.views.PostList Python 可执行文件:/var/lang/bin/python3.11 Python版本:3.11.6 Python路径:
['/var/任务', '/opt/python/lib/python3.11/site-packages', '/opt/python', '/var/lang/lib/python3.11/site-packages', '/var/运行时', '/var/lang/lib/python311.zip', '/var/lang/lib/python3.11', '/var/lang/lib/python3.11/lib-dynload', '/var/lang/lib/python3.11/site-packages', '/opt/python/lib/python3.11/site-packages', '/opt/python', '/var/任务'] 服务器时间:2023年10月31日星期二12:14:06 +0000
我看到一个不同的相关问题,表明我必须安装 pysqlite3,但我一直遇到错误
错误:pysqlite3 构建轮子失败
即使我安装了wheel、setuptools和cmake。
我正在运行Python3.11.3
我希望从这次在 awls 上托管的经验中学习 django,但这有点困难。
框架挑战:你正在解决一个错误的问题。
Django 需要一个数据库后端来存储其数据。
您正在尝试使用 SQLite 作为 Django 安装的后端。
SQLite 是一个嵌入式数据库引擎。它是一个库,最终将您的 SQL 查询转换为文件系统调用。它要求数据库文件驻留在您的应用程序可访问的文件系统上。
Lambda 不适用于具有共享文件系统作为依赖项的工作负载。从技术上讲,您可以挂载持久共享 EFS 卷,以便多个 Lambda 调用可重用。但这是一个边缘用例,并且 SQLite 不能很好地与 NFS 配合使用(其中 EFS 是一种风格):
SQLite 使用读/写锁来控制对数据库的访问。 (在Win95/98/ME下,缺乏对读/写锁的支持,而是使用概率模拟。)但要小心:如果数据库文件保存在NFS文件系统上,这种锁定机制可能无法正常工作。这是因为 fcntl() 文件锁定在许多 NFS 实现上被破坏。如果多个进程可能尝试同时访问该文件,您应该避免将 SQLite 数据库文件放在 NFS 上。
您最好使用可以通过网络进行通信的多用户 RDBMS。您可以将 PostgreSQL、MySQL 和 MariaDB 作为 RDS 上的托管服务、独立的 Docker 容器运行,或者只是将它们安装在 EC2 实例上。
与 SQLite(Django 根据需要创建的)相比,它确实需要一些工作,但它是让 Django 在 Lambda 上工作的唯一可靠方法。