首页 > 解决方案 > 结合来自 2 个 Rails 应用程序的数据?

问题描述

除了几个属性外,我有 2 个具有相同模型的 Rails 应用程序。我现在需要合并这些应用程序,我正在尝试找出如何合并它们的数据。挑战是:

我知道seed_dumpyaml_db但我不确定它们是否能很好地解决我的问题

标签: mysqlruby-on-railsmigration

解决方案


前段时间我也遇到过类似的情况,使用数据库多租户设计的应用程序。为了将所有数据合并到一个数据库中,我最终创建了一个 rake 任务,该任务将遍历每条记录和关联,并在新数据库中重新创建它们。

该任务有两个参数SOURCEDESTINATION,它会像这样运行: rake db:merge SOURCE=some_database DESTINATION=new_database. 该任务针对我需要合并的每个数据库运行。

在 rake 任务中,想法是这样的:

namespace :db do
  task :merge => [:environment, :load_config] do |t, args|
  raise "Empty SOURCE provided" if not ENV["SOURCE"] or ENV["SOURCE"].empty?
  @source = ENV['SOURCE'].to_sym
  @destination = (ENV['RAILS_ENV'] || 'development').to_sym

  # for each model
  ActiveRecord::Base.establish_connection(@source)
  # obtain the records and its associations
  ActiveRecord::Base.establish_connection(@destination)
  # loop through each record and build all associated records
  # apply any necesary transformation to data
  # then build the record and fill it with the new associations
  # skip callbacks / validations if needed
  # then save

在某些情况下,为了跟踪关联中的 id,我使用了哈希,它跟踪了原始 ID 和新 ID。

我知道每个应用程序的复杂性会使这个过程变得非常困难,但就我而言,这个想法作为一个起点非常有用。


推荐阅读