2017-06-21 120 views

回答

1

此任務是ActiveRecord的一部分。您可以在此處看到它的定義:database_tasks.rb

基本上任務調用ActiveRecord::Migrator它是負責將遷移應用到數據庫的模塊。

例如,如果你創建一個新的遷移,你會得到下面的輸出:

Running via Spring preloader in process 4675 
     invoke active_record 
     create db/migrate/20170621091940_create_user.rb 

當你調用db:migrate任務,它會調用ActiveRecord::Migrator.migrate("db/migrate", 20170621091940)和應用遷移。

+0

Thanks @Aschen因此rake可以用來做很多事情,但rails帶有一些rake任務,其中一個是db:migrate,它只是一個訪問「ActiveRecord :: Migrator」的構建工具(腳本)然後調用它的'migrate'方法?它是否正確? – stackjlei

+0

是的,這是正確的:-)正如@hardik說,它也檢查表'schema_migrations'哪些遷移已經執行。 – Aschen

1

db:migrate是一個佣金任務。 db:遷移任務(內置Rails支持程序)將搜索項目的db/migrate目錄並使用其中的文件更新數據庫的模式。

當您運行db:migrate時,rails將檢查一個名爲schema_migrations的特殊表,其中包含應用於數據庫的上次遷移的時間戳。它將存儲已運行的遷移文件的時間戳。

+0

所以這個任務可以運行,不管有沒有一個rails服務器運行? – stackjlei

+1

是的,Rake任務不需要服務器運行。 –

相關問題