Ruby on Rails 2.1 - 資料庫遷移



Rails 遷移使用 Ruby 定義資料庫模式的更改,從而可以使用版本控制系統來保持資料庫結構與實際程式碼同步。

它有很多用途,例如:

  • 開發團隊 - 如果一個人進行了模式更改,其他開發者只需要更新並執行 "rake migrate"。

  • 生產伺服器 - 當您推出新版本時,執行 "rake migrate" 以將資料庫也更新到最新版本。

  • 多臺機器 - 如果你在臺式機和筆記型電腦上進行開發,或者在多個位置進行開發,遷移可以幫助你保持所有機器的同步。

Rails 遷移可以做什麼?

  • create_table(name, options)

  • drop_table(name)

  • rename_table(old_name, new_name)

  • add_column(table_name, column_name, type, options)

  • rename_column(table_name, column_name, new_column_name)

  • change_column(table_name, column_name, type, options)

  • remove_column(table_name, column_name)

  • add_index(table_name, column_name, index_type)

  • remove_index(table_name, column_name)

遷移支援所有基本資料型別 - 字串、文字、整數、浮點數、日期時間、時間戳、時間、日期、二進位制和布林值 -

  • 字串 - 用於小型資料型別,例如標題。

  • 文字 - 用於較長的文字資料,例如描述。

  • 文字 - 用於較長的文字資料,例如描述。

  • 整數 - 用於整數。

  • 浮點數 - 用於小數。

  • 日期時間和時間戳 - 將日期和時間儲存到列中。

  • 日期和時間 - 只儲存日期或時間。

  • 二進位制 - 用於儲存影像、音訊或影片等資料。

  • 布林值 - 用於儲存真或假值。

有效的列選項為:

  • limit ( :limit => “50” )

  • default (:default => “blah” )

  • null (:null => false 表示 NOT NULL)

注意 - Rails 遷移執行的操作可以使用任何前端 GUI 或直接在 SQL 命令提示符下執行,但 Rails 遷移使所有這些操作都非常容易。

有關這些內容的詳細資訊,請參閱 Rails API

建立遷移

以下是建立遷移的通用語法:

C:\ruby\application> ruby script/generate migration table_name

這將建立檔案 db/migrate/001_table_name.rb。遷移檔案包含描述資料庫表資料結構的基本 Ruby 語法。

注意 - 在執行遷移生成器之前,建議清理模型生成器生成的現有遷移。

我們將建立兩個與我們的三個表對應的遷移 - books 和 subjects。

C:\ruby> cd library
C:\ruby\library> ruby script/generate migration books
C:\ruby\library> ruby script/generate migration subjects

請注意,您在建立遷移時使用小寫字母表示 book 和 subject,並使用複數形式。這是 Rails 範例,您每次建立遷移時都應遵循此範例。

編輯程式碼以告知其要執行的操作

轉到應用程式的 db/migrate 子目錄,並使用任何簡單的文字編輯器逐個編輯每個檔案。

修改 001_books.rb 如下:

ID 列將自動建立,因此在這裡也不要建立它。

class Books < ActiveRecord::Migration
   def self.up
      create_table :books do |t|
         t.string     :title, :limit => 32, :null => false
         t.float      :price
         t.integer    :subject_id
         t.text       :description
         t.timestamp  :created_at
      end
   end
   def self.down
      drop_table :books
   end
end

self.up 方法用於遷移到新版本,self.down 方法用於根據需要回滾任何更改。目前,上述指令碼將用於建立books表。

修改 002_subjects.rb 如下:

class Subjects < ActiveRecord::Migration
   def self.up
      create_table :subjects do |t|
         t.string :name
      end
      Subject.create :name => "Physics"
      Subject.create :name =>"Mathematics"
      Subject.create :name => "Chemistry"
      Subject.create :name => "Psychology"
      Subject.create :name => "Geography"
   end
   def self.down
      drop_table :subjects
   end
end

上述指令碼將用於建立subjects表;它將在 subjects 表中建立五條記錄。

執行遷移

現在您已經建立了所有必需的遷移檔案,是時候將它們應用到資料庫了。為此,請轉到命令提示符並開啟應用程式所在的庫目錄,然後鍵入rake migrate,如下所示:

C:\ruby\library> rake db:migrate

這將建立一個 "schema_info" 表(如果不存在),該表跟蹤資料庫的當前版本。每次新的遷移將是一個新版本,並且將執行任何新的遷移,直到您的資料庫達到當前版本。

Rake 是一個類似於 Unix make 程式的 Ruby 構建程式,Rails 利用它來簡化複雜任務(例如更新資料庫結構等)的執行。

為生產和測試資料庫執行遷移

如果您想指定要用於遷移的 rails 環境,請使用 RAILS_ENV shell 變數。

例如:

C:\ruby\library> set RAILS_ENV=production
C:\ruby\library> rake db:migrate
C:\ruby\library> set RAILS_ENV=test
C:\ruby\library> rake db:migrate
C:\ruby\library> set RAILS_ENV=development
C:\ruby\library> rake db:migrate

注意 - 在 Unix 系統上,使用 "export RAILS_ENV=production" 代替 set 命令。

接下來是什麼?

現在我們有了資料庫和所需的表。在接下來的兩章中,我們將探討兩個重要的元件:控制器 (ActionController) 和檢視 (ActionView)。

  • 建立控制器 (Action Controller)
  • 建立檢視 (Action View)
廣告
© . All rights reserved.