2010-09-24 43 views
3

我想在rails服務器啓動時運行一個方法。這是一種模型方法。ruby​​ on rails,在服務器啓動時運行一個方法2.3

我嘗試使用config/initializers/myfile.rb,但該方法在遷移過程中被調用,所以它從一個不存在的表中進行選擇。

試過environment.rb中也有,但是該類還不存在(並可能有遷移同樣的問題)

我不知道在哪裏把這個方法,所以它只會上運行服務器啓動,而不是在遷移過程中。

+0

問題是遷移需要引導程序。所以你可能只需要一個條件來找出它是如何開始的,但我不知道你的環境。 – 2010-09-24 20:51:32

+0

是怎麼開始的? – Alistra 2010-09-24 21:01:34

回答

3

有些事情你可以做,實際上改善這一點。問題在於,當rake加載你的環境時,你正在運行這段代碼,但你真的只想在你的web服務器的實例加載環境時運行這個代碼。解決此問題的一種方法是在rake加載您的環境時設置一個值,並在設置該值時不要執行初始化程序代碼。你可以這樣做如下:

task :environment => :disable_initializer 

task :disable_initializer do 
    ENV['DISABLE_INITIALIZER_FROM_RAKE'] = 'true' 
end 

#In your initializer: 

ENV['DISABLE_INITIALIZER_FROM_RAKE'] || MyModel.method_call 
+0

作品非常好,thx – Alistra 2010-09-26 21:06:35

+0

這樣的作品,它不漂亮,但它的作品 – tothemario 2011-09-20 17:21:46

1

嘗試將您的方法調用放入boot.rb中Rails :: initializer調用後的run方法中。因爲我在工作,所以現在我的面前沒有鋼軌,但我認爲整個環境都應該按照這一點加載,並且您可以在框架上運行方法。

+0

我的模型類不能從該文件訪問(或者我不知道如何訪問它)。 – Alistra 2010-09-24 21:06:34

2

無法從我的理解中避免這種情況。您可以將依賴於新表的初始化程序代碼放置在救援模塊中,以便將其中的內容安靜下來,以便其他人可以運行遷移。

0

我發現這工作得很好:

如果File.basename($ 0)== 「軌」 & & ARGV == []

它還會檢測到「導軌生成」。

相關問題