如何将原有Rails应用的schema、migrations等数据库资源迁移至新应用
问题结论及操作方案
完全可以实现数据库资源的迁移,甚至你不需要额外新建完整Rails应用,直接补全缺失的test目录即可解决问题,两种场景的操作步骤如下:
方案1:无需新建应用,直接补全test目录(操作成本更低)
- 若使用Rails默认的Minitest测试框架,在现有项目根目录执行
rails generate test_unit:install,命令会自动生成标准test目录结构、test_helper.rb等基础配置文件 - 若使用RSpec测试框架,执行
rails generate rspec:install生成对应的spec目录即可 - 执行
rails test验证测试框架正常可用即可,无需修改任何现有业务代码、数据库配置
方案2:迁移数据库资源到新Rails应用
如果确实需要新建完整Rails应用,按以下步骤迁移PostgreSQL相关资源即可:
1. 迁移核心配置文件
- 复制现有项目
db/目录下的所有内容到新应用的db/目录,包含:migrations/下的全部迁移文件、schema.rb、seeds.rb(如果有自定义种子数据) - 复制现有项目
config/database.yml到新应用的config/目录,检查确认PostgreSQL连接配置(数据库名、用户名、密码等)和原有配置一致 - 如果你有自定义PostgreSQL扩展、视图、触发器等未写入迁移文件的资源,先在现有项目执行
pg_dump -s -d 原有数据库名 > db_structure.sql导出纯结构SQL文件,新应用数据库创建完成后执行psql -d 新数据库名 -f db_structure.sql导入即可
2. 验证迁移结果
- 在新应用根目录执行
bundle install确保pg等数据库依赖已安装 - 执行
rails db:create创建数据库(如果还未创建) - 执行
rails db:migrate运行所有迁移,完成后对比新老应用的schema.rb文件,确认表结构、字段、索引等配置完全一致 - 如果需要迁移现有业务数据,在原有项目执行
rails db:dump导出数据,到新应用执行rails db:load即可完成全量数据迁移
迁移完成后建议先运行
rails c查询几个核心业务表的数据,确认配置完全符合预期后再迁移业务代码。
内容的提问来源于stack exchange,提问作者jbeachy
相关产品推荐
相关产品推荐

