首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

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

     編輯:Java 相關知識

為什麼用程式碼管理資料庫?

身為開發者,頻繁建立管理 MySQL 資料庫是常態。傳統工具如 phpMyAdmin、MySQL CLI 雖好用,但總感覺與程式開發流程脫節。Rails 提供 Migrations 機制,讓開發者以 Ruby 程式碼版控資料庫結構,配合 Rake 任務自動化執行,實現「基礎設施即程式碼」理念。

一、Migrations 管理資料表結構

基本運作原理

建立 Model 時自動產生 Migration 檔(如 db/migrate/001_create_contacts.rb),使用 Ruby DSL 定義資料表操作:

class CreateContacts < ActiveRecord::Migration
  def self.up
    create_table :contacts do |t|
      t.column :name, :string, :null => false
      t.column :email, :string
      t.column :phone, :string, :limit => 10, :null => false
    end
  end
  def self.down
    drop_table :contacts
  end
end

執行 rake db:migrate 套用變更,rake db:migrate VERSION=0 回滾至初始狀態。內建版控機制支援如 Subversion/CVS 般的前後回滾。

新增複雜遷移

需修改結構時,產生新遷移檔:

ruby script/generate migration your_desired_migration_name

編輯檔案定義 self.up/self.down 對應操作,再執行 migrate 套用。

二、Fixtures 載入種子資料

場景:靜態參考資料匯入

如「州名」下拉選單,手工建表易出錯且繁瑣。Fixtures 原為測試資料設計,採 YAML 或 CSV 格式,亦可用於遷移期載入種子資料。

實作步驟

  1. 建立 db/seed/states.csv:
id, name, abbreviation
1, Alabama, AL
2, Alaska, AK
3, Arizona, AZ
...
  1. 建立 Rake 任務 lib/tasks/seeder.rake:
namespace :db do
  desc "Load seed fixtures from db/seed into current environment's database"
  task :seed => :environment do
    require 'active_record/fixtures'
    Dir.glob(RAILS_ROOT + '/db/seed/*.csv').each do |file|
      Fixtures.create_fixtures('db/seed', File.basename(file, '.*'))
    end
  end
end
  1. 執行 rake db:seed 匯入資料,MySQL 驗證表已建立且資料寫入。

三、跨資料庫資料遷移

Rails 核心團隊 Tobias Lutke 實踐:以 Rake 任務將資料庫匯出為 YAML,再透 Migrations 導入目標資料庫(支援 MySQL、SQLite、SQL Server、Oracle)。關鍵指令:

rake db:backup:write  # 匯出為 YAML 至 db/backup/
# 修改 database.yml 指向目標資料庫
rake db:backup:write  # 匯入目標庫

結語:掌握 Rake 擴充無限可能

Rails 不僅支援 MySQL,涵蓋主流資料庫。深入理解 Rake 任務運作,可撰寫專屬自動化腳本、建立可重用 Rake 函式庫。詳見 Rails 官方 Migrations 文件:ActiveRecord::Migration API。

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