几个月前我一直在开发一个应用程序。之后,决定对该应用程序进行一次大修。这涉及更改大量数据库模式。为了实现这个目标,我们选择在另一个分支上工作。当我们不得不进行迁移时,我们毫不费力地包含了处理数据库中可用的当前数据的代码,以便它与新的数据库模式兼容。这种发展以这种方式进行了几个月。现在,我们需要从旧数据库架构中获取所有数据并将其迁移到新数据库架构中。
这样的任务看起来很复杂,需要请教。是否有任何 gem 可以帮助解决这个问题?谢谢
最佳答案
首先,我假设您使用的是关系数据库(如 MySql),并且您有一些可管理的表。
这是一个涉及离散步骤的简单方法:
对于每个表,
- 为每个要导入的表编写 SQL 查询。一次或批量运行每个表导入。
- 在您的 Rails 控制台中,通过尝试实例化您的模型来验证数据。
但是,使用这种方法,您可能会遇到数据验证错误。
第二种方法可以使用 CSV。这里我假设您在 Ruby 1.9.3 中使用 CSV。您可以将其切换为对较旧的 Rubies 使用 FasterCSV。
- 将您的数据库导出为 CSV。
在 rake 任务中,您可以尝试手动映射一些数据:
# Put this in lib/tasks/import.rb require 'csv' namespace :import do desc 'import some data!' task :from_csv do CSV.foreach('path/to/file.csv') do |row| model = YourNewModel.new(field_xyz: row[xyz], ...) # ... maybe do some other stuff here if you need to process anything model.save if model.valid? # maybe check if it's valid end end end
当然,在这里您必须将模型字段正确映射到 CSV 行。 Check out the 1.9.3 CSV docs here.
现在像这样运行 rake 任务:
$ cd /path/to/your/app && rake import:from_csv
关于database - Rails 3 - 将大量数据从旧数据库模式移动到新数据库模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11549513/