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

Rails部署Heroku执行db:migrate报dateti类型不存在错误

问题产生原因
  • 核心原因是你修改本地迁移文件后,没有将变更提交并推送到Heroku远程环境。heroku run rails db:migrate执行时读取的是Heroku服务器上存储的代码,不是你本地修改后的文件,因此仍然会加载到写有错误类型dateti的旧版本迁移文件。
  • 本地SQLite和Heroku上PostgreSQL的类型校验规则差异是问题仅在生产环境出现的原因:SQLite采用动态类型机制,对字段类型名的校验非常宽松,即使写了不存在的类型,多数场景下会自动做兼容处理不会抛错;而PostgreSQL是强静态类型系统,遇到未定义的类型会直接终止迁移流程。
解决方法

按以下顺序操作即可修复:

  1. 确认本地AddActivationToUsers迁移文件的修改已经保存,在项目根目录提交变更到本地Git仓库:
git add db/migrate/*add_activation_to_users.rb
git commit -m "Fix typo: correct activated_at column type to datetime"
  1. 将最新代码推送到Heroku部署环境:
git push heroku main

如果你本地部署用的分支不是main(比如旧项目常用master),将命令里的main替换为实际部署的分支名即可。
3. 部署完成后,先验证远程环境的迁移文件是否已经更新(可选,用来排查推送异常):

heroku run cat db/migrate/*add_activation_to_users.rb

确认输出的代码里activated_at字段类型为:datetime后,重新执行迁移命令:

heroku run rails db:migrate

特殊情况处理:如果执行上述步骤后仍然报错,可以先查看迁移状态:heroku run rails db:migrate:status,如果AddActivationToUsers对应的迁移状态显示为up,说明之前失败的迁移被异常标记为已执行,先执行heroku run rails db:rollback STEP=1回滚该迁移,再重新执行迁移命令即可。这种情况在PG环境下概率极低,仅在非事务性迁移场景才会出现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:57:26