2009-05-26 72 views
0

當我爲使用插件中定義的模型的應用程序運行rake任務時,我得到一個未初始化的常量錯誤,但是當我使用腳本/ runner在rake任務中觸發模型進程時,作業運行正常?插件是否可用於rake任務?

加載所有插件的script/runner是否存在一些差異?當我啓動rake任務時,即使它正在傳遞一個環境,它也不會發生?

回答

1

您的耙子任務需要依賴於:環境。這將旋轉你的應用程序的環境,讓您將模型接入等

desc "Make DB Views" 
task :views => [:environment] do |t| 
# your task's code 

end 
+0

儘管如此,我們確實已經以這種方式傳遞了環境,這就是讓它如此奇怪的原因。 – nitecoder 2009-05-26 01:22:49

0

你需要指定你的Rake任務要求的環境中加載:

task :your_task => :environment do |t| ... 

task :your_task => [:environment] do |t| ... 

task :your_task, :param1, :param2, :needs => :environment do |t, args| ... 

task :your_task, :param1, :param2, :needs => [:environment] do |t, args| ... 

如果你沒有指定這一點,那麼還有另外一個問題。我認爲一個常見的錯誤來源是這樣的事實,即插件被加載到名爲Rails::Plugin的名稱空間中。因此,如果您在插件中定義了一個名爲Foo的類,那麼Rake任務需要將其引用爲Rails::Plugin::Foo而不是簡單的Foo

如果這不能解決你的問題,然後嘗試添加puts "Check"對插件的init.rb文件的第一行,並確保當您運行rake任務Check顯示。如果是這樣,那麼你的插件正在被加載,但也許它在那之後默默地失敗。

最後一件事:也許你正試圖在任務外使用插件,例如在你的Rake文件的開頭,在一些初始化代碼中?如果是這樣,那麼它將失敗,因爲只有當任務執行時(當環境被加載時)纔會加載插件。

希望這會有所幫助。