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

Heroku部署otree SVO报数据库未就绪 重置无效如何解决

oTree SVO程序部署到Heroku-18栈提示数据库表缺失、重置无效的排查与解决方案

核心排查方向与对应操作

  • 检查Procfile是否缺失release阶段迁移配置
    绝大多数该类报错都是因为部署流程没有自动执行数据库迁移,仅手动重置数据库不会触发表结构创建。进入项目根目录打开Procfile,确保配置和下面一致,覆盖原有内容:

    release: otree migrate
    web: otree runserver 0.0.0.0:$PORT
    

    配置修改完成后提交代码重新推送到Heroku触发构建,release字段配置的命令会在每次部署、重启dyno前自动执行,确保表结构和当前代码版本匹配。

  • 检查Python版本是否未显式锁定导致迁移静默失败
    Heroku-18栈如果没有收到明确的版本指定,会默认拉取Python 3.6.x版本,和本地使用的Python 3.7、对应版本的oTree/SVO依赖不兼容,迁移过程会静默中断,不会抛出显性的构建失败提示。在项目根目录新建runtime.txt文件,写入Heroku-18支持的最高Python3.7版本号:

    python-3.7.13
    

    提交该文件后重新部署即可。

  • 检查数据库配置是否被本地配置覆盖
    打开项目下的settings.py文件,确认没有硬编码本地sqlite数据库路径,这类本地配置会覆盖Heroku自动注入的Postgres数据库连接参数,导致表要么建在临时文件系统中重启即丢失,要么因权限不足无法创建。可以执行heroku config:get DATABASE_URL确认Heroku侧数据库环境变量正常注入,数据库配置段优先读取该环境变量即可。

  • 按正确顺序执行数据库重置
    完成上述配置修改并重新部署成功后,按以下顺序操作,避免时机错误导致重置无效:

    1. 执行heroku logs --tail查看实时构建日志,确认release阶段的otree migrate命令没有抛出依赖、字段相关报错
    2. 执行heroku run otree resetdb --noinput触发数据库重置,全程观察命令行输出,确认所有模型表创建成功无报错
    3. 执行heroku restart重启所有dyno,等待10秒后再访问页面

注意:不要将本地运行生成的db.sqlite3文件提交到Heroku代码仓库,Heroku文件系统为临时存储,dyno重启后所有非数据库服务存储的文件都会被清空,同时本地上传的sqlite表结构和线上Postgres环境、依赖版本不匹配也会触发该报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:54:25