Read more

How to mount a legacy database to migrate data

Emanuel
August 14, 2017Software engineer at makandra GmbH

There are many approaches out there how you can import data from a legacy application to a new application. Here is an approach which opens two database connections and uses active record for the legacy system, too:

Illustration UI/UX Design

UI/UX Design by makandra brand

We make sure that your target audience has the best possible experience with your digital product. You get:

  • Design tailored to your audience
  • Proven processes customized to your needs
  • An expert team of experienced designers
Read more Show archive.org snapshot

1. Add you database information to you config/database.yml.

data_migration:
  database: your_application_data_migration

2. Create a separate application record for the data migration, e.g. in app/data_migration/migration_record.rb. You will need to create an app/data_migration.rb class first.

class DataMigration::MigrationRecord < ActiveRecord::Base

  self.abstract_class = true
  establish_connection(:data_migration)
  
end

3. Inherit from this class in the migration models, e.g. app/data_migration/user.rb.

class DataMigration::MigrationUser < DataMigration::MigrationRecord

  self.table_name = 'zz_1234_0' # you will need this if the table name is not data_migration_migration_users
  self.primary_key = 'data_id' # you will need this if the primary key is not id

  alias_attribute :title, :c1254
  alias_attribute :first_name, :c1255
  alias_attribute :last_name, :c1256
  alias_attribute :email, :c1257
  alias_attribute :phone, :c1258

end

4. Extend your app/models/data_migration.rb

class DataMigration

  def run
    migrate_users
  end

  def migrate_users
    DataMigration::MigrationUser.find_each do |migration_user|
      User.create!(
        title: migration_user.title,
        first_name: migration_user.first_name,
        last_name: migration_user.last_name,
        email: migration_user.email,
        phone: migration_user.phone
      )
    end
  end
  
end  

Now the best idea is to test this in the rails sandbox (so your development data stay untouched):

rails console --sandbox
2.4.1 :003 > DataMigration.new.run

Keep in mind our best practices for data migrations.

Emanuel
August 14, 2017Software engineer at makandra GmbH
Posted by Emanuel to makandra dev (2017-08-14 13:19)