2012-07-18 29 views
4

我工作的一個應用程序,直到幾個月前。之後,決定應用程序應該進行大修。這涉及到更改很多數據庫模式。爲了實現這個目標,我們選擇了另一個分支。當我們不得不進行遷移時,我們並沒有因爲包含處理數據庫中當前可用數據的代碼而苦惱,因此它與新的數據庫模式兼容。這種發展在幾個月內就這樣了。現在,我們需要從舊的數據庫模式中獲取所有數據並將其遷移到新的數據庫模式中。的Rails 3 - 移動大塊數據從舊的數據庫模式,以新的數據庫架構

這樣的任務似乎很複雜,求教。有沒有什麼寶石可以幫助你呢?由於

回答

0

首先,我假設你正在使用MySQL等關係數據庫中,並且您有表的一些管理的數量。

下面是一個簡單的方法,其涉及不連續的步驟:

對於每個表,

  1. 寫SQL查詢用於待導入的每個表。一次運行或批量運行每個表導入。
  2. 在您的Rails控制檯中,通過嘗試實例化模型來驗證數據。

但是,使用這種方法,你可能有數據驗證錯誤。

的第二種方法可以使用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 
    
相關問題