分享

[Rails][notes]Active Record Migrations(3)-官網閱讀紀錄[11]

記錄自己官網文件閱讀的注釋與筆記
主要也是訓練自己閱讀英文挑戰
https://guides.rubyonrails.org/getting_started.html
回朔 官網 筆記 rails

hoto by Sébastien Goldberg on Unsplash

4 Running Migrations

Rails 提供一些指令來運行一些migrations
你使用第一個migrations指令大概是bin/rails db:migrate,它以最基本的形式對尚未執行migrations,執行up或change。若是沒有這類型的migrations須執行他會退出,若有他會依照日期順序執行。
注意執行db:migrate會調用db:schema:dump,他會更新你的db/schema.rb檔案去匹配資料庫結構。
如果你有指定哪一個版本,Active Record將會執行所要求migrations。
版本號為檔案名稱的前綴數字如範例:
bin/rails db:migrate VERSION=20080906120000
如果版本大於目前版本,將會執行change (or up)在所有migrations到最新的本版包含20080906120000,如果版本號往下將會執行down當到所指定版本,但是不包含20080906120000。

4.1 Rolling Back

一個常見的任務是回朔到上一個版本,如範例,如果你犯了一個錯誤想要糾正他,你可以執行以下指令而不是追蹤他的版本號。
  

bin/rails db:rollback

它將會幫你回朔到上一個版本,,透過還原change或是執行down。如果妳需樣還原好幾步你可以透過STEP
  

bin/rails db:rollback STEP=3

他將回還原到前三個版本。
指令db:migrate:redo是執行回朔後在執行migrate的快捷方法。像是db:rollback你可以搭配STEP
  

bin/rails db:migrate:redo STEP=3

這些事情都可以透過db:migrate辦到,只是它們讓你更方便。

4.2 Setup the Database

bin/rails db:setup 可以建立一個資料庫,載入schema,並使用seed初始化

4.3 Resetting the Database

bin/rails db:reset 指令會刪除資料庫重新建立一次,功能等同bin/rails db:drop db:setup。

4.4 Running Specific Migrations

若要單獨的向上或向下可以透過db:migrate:updb:migrate:down執行,但需要指定版本
  

bin/rails db:migrate:up VERSION=20080906120000

這個指令會先檢查是否migration過,若是執行過則不動作

4.5 Running Migrations in Different Environments

預設情況下執行bin/rails db:migrate 則是在開發環境下執行,若要針對其他環境可以透過RAILS_ENV這個參數,範例執行對test環境執行使用:
  

bin/rails db:migrate RAILS_ENV=test

4.6 Changing the Output of Running Migrations

在預設情況下migrations會告知你它做了什麼以及花多少時間,一個migrations建立資料表及添加索引它會這樣輸出
  

==  CreateProducts: migrating =================================================

-- create_table(:products)

   -> 0.0028s

==  CreateProducts: migrated (0.0028s) ========================================


rails 提供一些方法讓你掌控這些訊息
回朔 官網 筆記 rails
  



class CreateProducts < ActiveRecord::Migration[6.0]

  def change

    suppress_messages do

      create_table :products do |t|

        t.string :name

        t.text :description

        t.timestamps

      end

    end


    say "Created a table"


    suppress_messages {add_index :products, :name}

    say "and an index!", true


    say_with_time 'Waiting for a while' do

      sleep 10

      250

    end

  end

end

上述將產生
  

==  CreateProducts: migrating =================================================

-- Created a table

   -> and an index!

-- Waiting for a while

   -> 10.0013s

   -> 250 rows

==  CreateProducts: migrated (10.0054s) =======================================

若不希望產生任何訊息可以執行bin/rails db:migrate VERBOSE=false

5 Changing Existing Migrations

有時你當你做migration時造成了錯誤,你已經執行了migration,rails 認為你已經執行過了所以不能再一次執行bin/rails db:migrate。你必須使用回朔bin/rails db:rollback然後修改完後在執行bin/rails db:migrate。
通常編輯執行中的migration是不明智的行為,這將會為你帶來額外的工作,你應該建立一份新的migration來滿足你的需求,並編輯尚未提交的程式碼來管理新的migration。
使用revert來寫新的migration,取消先前的migration很有用
#回朔  #官網  #筆記  #rails 
分類:學習

評論
上一篇
  • [Rails][notes]Active Record Migrations(2)-官網閱讀紀錄[10]
  • 下一篇
  • [Rails][notes]Active Record Migrations(4)-官網閱讀紀錄[12]
  • 更多文章
    載入中... 沒有更多了