Heroku部署Otree实验创建会话失败:数据库字段缺失求助
解决Otree上传Heroku后创建会话报错的问题
问题根源
报错提示otree_participant表缺少_gbat_is_connected列,核心原因是本地数据库结构和Heroku上的PostgreSQL未同步。本地使用SQLite时,Otree会自动适配模型变更,但Heroku的PostgreSQL必须手动执行数据库迁移来更新表结构。
一步步解决
1. 本地生成迁移文件
打开PyCharm终端,进入项目根目录,执行命令生成迁移脚本:
otree makemigrations
如果提示"No changes detected"但你确实修改了模型,可以指定你的app名称生成:
otree makemigrations 你的app名称
2. 本地验证迁移有效性
执行本地迁移,确保本地数据库结构匹配模型:
otree migrate
运行后本地测试正常,说明迁移文件无问题。
3. 推送迁移文件到Heroku
将生成的migrations文件夹(对应app目录下)加入Git版本控制:
git add 你的app目录/migrations/ git commit -m "添加_gbat_is_connected字段的迁移脚本"
推送到Heroku服务器:
git push heroku main
4. 在Heroku上执行迁移
通过Heroku CLI登录后,执行迁移命令更新远程数据库:
heroku run otree migrate
5. 验证问题是否解决
回到Heroku后台尝试创建会话,应该不会再出现字段不存在的报错。
额外提醒
- 确保本地与Heroku使用的Otree版本一致,建议在
requirements.txt中固定版本,例如:otree==5.10.0 - 若迁移时出现冲突,可先备份Heroku数据库,再尝试重置数据库(会清除所有现有数据,谨慎操作):
heroku run otree resetdb
内容的提问来源于stack exchange,提问作者Bénédicte
相关产品推荐
相关产品推荐

