Rails 3 - 将大块数据从旧数据库模式移动到新数据库模式

时间:2012-07-18 20:14:12

标签: database ruby-on-rails-3 migration

直到几个月前我才开始使用应用程序。之后,决定该应用程序应进行重大改革。这涉及更改大量数据库架构。为了实现这一目标,我们选择在另一个分支机构工作。当我们不得不进行迁移时,我们并没有麻烦自己包含处理数据库中可用的当前数据的代码,以便它与新的db模式兼容。这种发展持续了几个月。现在,我们需要从旧数据库模式中获取所有数据并将其迁移到新的数据库模式中。

这样的任务似乎很复杂,无法征求意见。有没有可以帮助解决这个问题的宝石?感谢

1 个答案:

答案 0 :(得分:0)

首先,我假设您正在使用像MySql这样的关系数据库,并且您有一些可管理的表格。

这是一个涉及离散步骤的简单方法:

对于每张桌子,

  1. 为要导入的每个表编写SQL查询。一次一个地或一次一个地运行每个表导入。
  2. 在Rails控制台中,尝试实例化模型来验证数据。
  3. 但是,使用此方法可能会导致数据验证错误。

    第二种方法可以使用CSV。在这里,我假设你在Ruby 1.9.3中使用CSV。您可以将其切换为使用旧版Rubies的FasterCSV。

    1. 将数据库导出为CSV。
    2. 在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