You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行eb deploy部署Django到ElasticBeanstalk报SQLite版本错误

根因说明
  1. Django 3.1部署报错:当前所用Elastic Beanstalk运行环境预装的SQLite版本为3.7.17,低于Django 3.1要求的最低3.8.3版本,触发版本校验失败。
  2. 降级到Django 2.1后的报错:Django 2.1不支持pathlib.PosixPath类型作为数据库路径参数,settings.py中DATABASES配置的NAME字段使用了BASE_DIR / 'db.sqlite3'这类Path对象写法,旧版Django无法识别该类型。
解决方案

生产环境推荐方案

Elastic Beanstalk实例的本地存储是临时存储,实例重启、扩容替换、版本更新时都会清空本地数据,存储在SQLite中的数据会完全丢失,生产环境禁止使用SQLite作为数据库,按以下步骤调整:

  • 在AWS控制台创建RDS实例,可选MySQL、PostgreSQL等官方支持的数据库引擎
  • 将RDS实例与EB环境配置在同一个VPC下,调整安全组规则允许EB实例访问RDS的数据库端口
  • 修改settings.py中的DATABASES配置,适配RDS的连接参数、数据库引擎
  • 重新执行eb deploy即可完成部署

临时测试场景方案(仅测试用,不建议生产使用)

方案1:保留Django 2.1版本

修改settings.py中的数据库配置,将Path对象转为字符串即可:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': str(BASE_DIR / 'db.sqlite3'),
    }
}

方案2:保留Django 3.1+版本

两种选择任选其一:

  1. 更换更高版本的EB Python运行平台,新版Amazon Linux 2的Python运行环境预装的SQLite版本已经满足3.8.3以上的要求
  2. 通过.ebextensions配置在部署时手动编译安装高版本SQLite:
    在项目根目录创建.ebextensions/upgrade_sqlite.config文件,写入以下配置:
packages:
  yum:
    gcc: []
    make: []
    wget: []

commands:
  01_download_sqlite:
    command: wget https://sqlite.org/2022/sqlite-autoconf-3390200.tar.gz
    cwd: /tmp
    test: test ! -f /usr/local/bin/sqlite3
  02_extract_sqlite:
    command: tar xzf sqlite-autoconf-3390200.tar.gz
    cwd: /tmp
    test: test ! -f /usr/local/bin/sqlite3
  03_compile_sqlite:
    command: ./configure --prefix=/usr/local && make && make install
    cwd: /tmp/sqlite-autoconf-3390200
    test: test ! -f /usr/local/bin/sqlite3
  04_update_lib_path:
    command: echo '/usr/local/lib' > /etc/ld.so.conf.d/sqlite3.conf && ldconfig

配置完成后重新执行eb deploy即可通过版本校验。

内容的提问来源于stack exchange,提问作者Guillaume Ayad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 20:15:03