2014-06-10 79 views
7

Rails的初始化器在運行任何rake任務(包括db:migratedb:seed)時運行是非常令人驚訝的。Rails初始化器在遷移數據庫時運行

我的應用程序中的初始化程序啓動後臺線程(一種工作進程),只有當應用程序在調試和生產模式下運行時才應執行它。

如何在執行rake db:migrate時阻止運行特定的初始化程序或如何在初始化程序中檢測到rake任務正在運行?

+2

遷移需要加載您的環境,初始化程序是環境的一個組成部分。如果您需要初始化程序在遷移期間不運行,那麼它可能位於錯誤的地方。 – Matt

回答

4

這裏是一個解決方案如何防止初始化從Rake任務運行:

unless (File.basename($0) == 'rake') 
    # Initializer code 
end 
+1

這個_obviously_取決於用「rake」調用它。如果您開始對命令「rails db:migrate」使用「rails」或其他類型,則這不起作用。 – traday

1

遷移需要加載您的環境,初始值設定項是環境的一個組成部分。如果您需要初始化程序在遷移期間不運行,那麼它可能位於錯誤的地方。

如果你不能將它移動到其他地方,那麼也許這個答案(create a 'fast migrate' rake task)將有所幫助。

+4

馬特,這是「其他地方」是什麼?要求:我需要在應用程序啓動時運行線程,並且在遷移時不需要它。在哪裏放置線程啓動不必處理額外的命令行參數,就像在有關快速遷移的答案中一樣? – Paul

1

如果你的初始化依賴於特定表的科銳,一個選擇是使用ActiveRecord::Base.connection.table_exists? :mytable檢查。

相關問題