django AWS Lambda:deterministic=True需要SQLite 3.8.3或更高版本

nnt7mjpx  于 2023-11-20  发布在  Go
关注(0)|答案(1)|浏览(187)

我有一个网站已经托管在AWS Lambda上,正在测试API是否有效。但是当我在网站上运行它时,它给了我错误。
位于/API/ deterministic=True的NotSupportedError需要SQLite 3.8.3或更高版本请求方法:GET请求URL:https://2dx7zf9yt5.execute-api.us-east-1.amazonaws.com/dev/api/ Django版本:4.2.4异常类型:NotSupportedError异常值:
deterministic=True requires SQLite 3.8.3 or higher异常位置:/var/task/django/db/backends/sqlite3/_functions.py,line 45,in register引发时间:blog_API.views.PostList Python可执行文件:/var/lang/bin/python3.11 Python版本:3.11.6 Python路径:
请输入'/var/task','/opt/python/lib/python3.11/site-packages','/opt/python','/var/lang/lib/python3.11/site-packages','/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/python3.11/site-packages','/opt/python','/var/task']服务器时间:Wed,31 Oct 2023 12:14:06 +0000
我看到了一个不同的相关问题,它告诉我必须安装pysqlite 3,但我一直以错误结束
错误:无法为pysqlite 3生成轮
即使我安装了wheel、setuptools和cmake。
我正在运行Python 3.11.3
我希望从这次在awls上托管的经历中学习django,但这坚韧。

6psbrbz9

6psbrbz91#

框架挑战:你正在解决一个错误的问题。
Django需要database backend来存储数据。
您正在尝试使用SQLite作为Django安装的后端。
SQLite是一个嵌入式数据库引擎。它是一个库,在一天结束时,将SQL查询转换为文件系统调用。它要求数据库文件驻留在应用程序可访问的文件系统上。
Lambda不是为依赖共享文件系统的工作负载而设计的。从技术上讲,您可以通过多次Lambda调用来重用mount a persistent shared EFS volume。但这是一个边缘用例,SQLite不能很好地与NFS(EFS是其中的一种)一起使用:
SQLite使用读/写器锁来控制对数据库的访问。(在Win95/98/ME下,不支持读/写锁,而是使用概率模拟。)但请注意:如果数据库文件保存在NFS文件系统上,则此锁定机制可能无法正常工作。这是因为fcntl()在很多NFS实现中,文件锁定被破坏。如果多个进程可能同时尝试访问文件,则应避免将SQLite数据库文件放在NFS上。
你最好使用一个多用户的RDBMS,你可以通过网络进行通信。你可以在RDS上运行PostgreSQL,MySQL和MariaDB作为托管服务,作为独立的Docker容器,或者只是将它们安装在EC2示例上。
与SQLite(Django根据需要创建)相比,它确实需要一些工作,但这是使Django在Lambda上工作的唯一可靠方法。

相关问题