Как перенести устаревшие данные PHP MySQL в новую модель данных Rails? - PullRequest
4 голосов
/ 07 декабря 2011

Я пытаюсь портировать старое приложение PHP на Rails. Я сбросил устаревшие таблицы mysql и загрузил их на сервер, на котором запущено новое приложение rails. Как лучше всего перенести данные из старых унаследованных таблиц в новую модель Rails? Я мог бы написать PHP-скрипт, чтобы выкладывать все в ruby, а затем использовать его для заполнения seed.rb, но, похоже, для этого должен быть более простой способ.

Новое приложение - RoR 3.0.9, а база данных - все еще mysql.

1 Ответ

9 голосов
/ 07 декабря 2011

Я бы написал задачу с граблями, чтобы соединить старые таблицы и сбросить их в новую базу данных.Примерно так:

# config/database.yml
legacy_db:
  adapter: mysql
  username: foo
  password: bar

# lib/tasks/import.rake
namespace :import do
  desc 'import the legacy db data'
  task :legacy => :environment do

    # connect to legacy db
    class OldDb < ActiveRecord::Base
      establish_connection :legacy_db
    end

    # define classes for legacy tables
    class OldUser < OldDb
      set_table_name 'user'
      set_primary_key 'user_id'
    end
    # ...do this for all your old tables

    # import from old models to new models
    OldUser.all.each do |u|
      User.create(
        :user_name  => u.login_name
        :created_at => Time.parse(u.account_opened_date)
        # etc....
      )
    end

  end
end

и звоните с: RAILS_ENV=production bundle exec rake import:legacy

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...