AWS部署Django应用遇deterministic=True报错,修改文件后仍未解决?
解决AWS Elastic Beanstalk部署Django时SQLite版本过低的报错
核心问题原因
你手动修改/var/app/current/venv下的文件无效,因为Elastic Beanstalk部署时会使用独立的staging虚拟环境(即/var/app/venv/staging-*),部署过程不会同步你手动修改的内容,导致旧的SQLite导入逻辑依然生效。
解决方案
方案1:使用django-sqlite3替代默认后端(推荐)
这是最规范的方式,无需修改Django源码:
- 安装依赖:
pip install django-sqlite3 - 修改项目
settings.py中的数据库配置,替换ENGINE:DATABASES = { 'default': { 'ENGINE': 'django_sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } } - 将
django-sqlite3添加到requirements.txt,然后重新执行:eb deploy
方案2:自动替换staging环境的Django源码导入
如果必须沿用默认SQLite后端,可通过EB配置文件在部署时自动修改staging环境的文件:
- 在项目根目录创建
.ebextensions文件夹,新建配置文件01_fix_sqlite.config - 写入以下内容(可直接用通配符
staging-*匹配所有staging虚拟环境):container_commands: 01_replace_sqlite_import: command: | sed -i "s/from sqlite3 import dbapi2 as Database/from pysqlite3 import dbapi2 as Database/" /var/app/venv/staging-*/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py leader_only: true - 确保
requirements.txt中包含pysqlite3,然后执行eb deploy
方案3:升级到Amazon Linux 2环境
Amazon Linux 1默认的SQLite版本较低,而Amazon Linux 2自带满足3.8.3+要求的高版本SQLite,直接升级EB环境的操作系统版本,可从根本解决该问题。
内容的提问来源于stack exchange,提问作者Daniel Johnson
相关产品推荐
相关产品推荐

