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

Rails 7本地回滚数据库后服务器数据库未更新问题

问题解决步骤

1. 确认服务器已执行的迁移版本

登录服务器,进入当前部署的应用目录,启动生产环境控制台:

cd /path/to/your/app/current
rails c production

在控制台中查询已执行的迁移版本:

ActiveRecord::Base.connection.execute("SELECT version FROM schema_migrations").to_a

将结果与本地db/migrate/目录下的最新迁移文件版本号对比(文件名开头的时间戳即为版本号)。

2. 处理重复/已记录的迁移版本

如果服务器的schema_migrations表中已经存在你重新生成的迁移版本号,Rails会判定该迁移已执行,不会重复运行。此时有两种处理方式:

方式一:回滚旧迁移后重新执行

在服务器的应用目录下执行回滚命令(替换OLD_VERSION为旧迁移的版本号):

rails db:rollback VERSION=OLD_VERSION production

然后执行最新迁移:

rails db:migrate production

方式二:手动移除已记录的版本后执行迁移

在生产环境控制台中删除对应版本的记录(替换OLD_VERSION):

ActiveRecord::Base.connection.execute("DELETE FROM schema_migrations WHERE version = 'OLD_VERSION'")

退出控制台后执行迁移:

rails db:migrate production

3. 验证部署与权限问题

  • 确认服务器当前release目录下的db/migrate/文件是最新版本,避免部署时分支错误或缓存导致文件未更新。
  • 检查生产环境SQLite数据库文件的权限:
ls -l /path/to/your/app/current/db/production.sqlite3

确保运行Rails的用户(如deploy用户)拥有该文件的读写权限。

4. 查看Capistrano迁移日志

执行带trace参数的迁移命令,排查执行过程中的错误:

cap production deploy:migrate --trace

根据日志中的错误信息(如权限不足、迁移文件语法错误等)针对性解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 16:33:25