首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

善用 Rails Rake 管理 MySQL 資料庫:遷移、種子資料與跨庫同步

     編輯:MySQL 資料庫相關知識

程式設計師的資料庫管理困境

優秀程式設計師除撰寫代碼,亦需創建管理大量資料庫。過往使用 phpMyAdmin、MySQL client 等工具雖好用,但總感編程與資料庫管理間存在鴻溝。為何不以編程方式管理資料庫結構?Rails 提供了答案:透過其功能,程式設計師可用熟悉的方式管理 MySQL。

一、Migrations:資料表的版本控制

Rails 中創建 contact model 時,同步創建 contacts 資料表。操作資料表轉化為操作模型屬性。核心功能 Migrations(遷移) 讓開發者用 Ruby 管理資料庫結構,結合 Rake 依腳本指令更新資料庫,內建版本控制,可像 Subversion/CVS 般回滾變更。

Migrations 類似 Active Record,語法簡單,支援創建、修改、刪除資料表,並提供建構控制器。創建 model 時自動生成遷移檔(如 db/migrate/001_create_contacts.rb):

class CreateContacts < ActiveRecord::Migration
  def self.up
    create_table :contacts do |t|
    end
  end
  def self.down
    drop_table :contacts
  end
end

修改後執行 rake db:migrate 即創建資料表。回滾至版本 0:rake db:migrate VERSION=0,資料表隨之刪除。複雜操作(新增資料表、修改欄位型別)只需生成新遷移檔:ruby script/generate migration your_desired_migration_name。

二、Fixtures 載入種子資料

專案初期常需導入現成資料(如州名稱單選選單)。手工建表繁瑣且易錯。Fixtures 原為測試簡化示例資料轉換而設計,稍加改造即可用於遷移期間載入資料。格式支援 YAML 與 CSV。

範例:建立 db/seed/state.csv:

id, name, abbreviation
1, Alabama, AL
2, Alaska, AK
...

創建 lib/tasks/seeder.rake:

namespace :db do
  desc "Load seed fixtures (from db/seed) into the current environment's database."
  task :seed => :environment do
    require 'active_record/fixtures'
    Dir.glob(RAILS_ROOT + '/db/fixtures/*.csv').each do |file|
      Fixtures.create_fixtures('db/seed', File.basename(file, '.*'))
    end
  end
end

執行 rake db:seed 即生成資料表並導入資料。

三、跨資料庫資料遷移

Rails 開發者 Tobias Lutke 以 Rake 任務將資料導出為 YAML,再透 Migrations 導入其他資料庫(MySQL、SQLite、SQL Server、Oracle)。關鍵命令:

# 導出
rake db:backup:write
# 修改 database.yml 指向目標資料庫
# 導入
rake db:backup:load

四、小結

Rake 不僅能跑測試、跑遷移,更可編寫自訂任務、建立專屬 Rake 庫。本文僅窺冰山一角,Rails 支援主流資料庫。深入探索請參閱 官方 Migrations 文檔。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved