當我爲使用插件中定義的模型的應用程序運行rake任務時,我得到一個未初始化的常量錯誤,但是當我使用腳本/ runner在rake任務中觸發模型進程時,作業運行正常?插件是否可用於rake任務?
加載所有插件的script/runner是否存在一些差異?當我啓動rake任務時,即使它正在傳遞一個環境,它也不會發生?
當我爲使用插件中定義的模型的應用程序運行rake任務時,我得到一個未初始化的常量錯誤,但是當我使用腳本/ runner在rake任務中觸發模型進程時,作業運行正常?插件是否可用於rake任務?
加載所有插件的script/runner是否存在一些差異?當我啓動rake任務時,即使它正在傳遞一個環境,它也不會發生?
您的耙子任務需要依賴於:環境。這將旋轉你的應用程序的環境,讓您將模型接入等
如
desc "Make DB Views"
task :views => [:environment] do |t|
# your task's code
end
你需要指定你的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文件的開頭,在一些初始化代碼中?如果是這樣,那麼它將失敗,因爲只有當任務執行時(當環境被加載時)纔會加載插件。
希望這會有所幫助。
儘管如此,我們確實已經以這種方式傳遞了環境,這就是讓它如此奇怪的原因。 – nitecoder 2009-05-26 01:22:49