2011-12-07 40 views
4

我想將一箇舊的PHP應用程序移植到Rails。我拋棄了傳統的mysql表,並將它們上傳到新的rails應用程序正在運行的服務器上。將舊數據表中的數據遷移到新Rails模型的最佳方式是什麼?我可以編寫一個PHP腳本來提取ruby中的所有內容,然後使用它來填充seed.rb,但似乎應該有一個更簡單的方法來實現此目的。如何將原有的PHP mysql數據遷移到新的Rails數據模型?

新應用程序是RoR 3.0.9,而數據庫仍然是mysql。

回答

9

我會寫一耙的任務線了舊錶,並將它們轉儲到新的數據庫。事情是這樣的:

# 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

+0

這是偉大的!謝謝! – bjork24

+0

非常有幫助,謝謝。從基類繼承我沒有工作,我最後只是添加'establish_connection:legacy_db'到每個oldModel類。 –