2009-05-26 10 views
0

Wenn ich einen Rake-Task für eine Anwendung ausführen, die in einem Plugin definierte Modelle verwendet, erhalte ich einen nicht initialisierten Konstantenfehler, aber wenn ich den Modellprozess mit script/runner in der Rake-Task starte, läuft der Job einwandfrei ?Sind Plugins für eine Rake-Aufgabe verfügbar?

Gibt es einen Unterschied zwischen Skript/Runner, der alle meine Plugins lädt, was nicht geschieht, wenn ich eine Rake-Task starte, obwohl sie an eine Umgebung übergeben wird?

Antwort

1

Ihre Rake-Aufgabe muss abhängig sein von: Umgebung. Das wird der App-Umgebung spin up und Sie Zugriff auf Ihre Modelle geben usw.

Eg

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

end 
+0

Das ist die Sache aber, wir haben die Umgebung, die auf diese Weise passiert ist, das macht es so merkwürdig. – nitecoder

0

Sie müssen angeben, dass Ihre Rake Aufgabe, die Umwelt zu ladende erfordert:

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

oder

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

oder

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

oder

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

Wenn Sie dies tun angeben, dann gibt es ein weiteres Problem. Ich denke, dass eine häufige Fehlerquelle darin besteht, dass die Plugins in einen Namespace namens Rails::Plugin geladen werden. Wenn Sie also eine Klasse namens Foo in Ihrem Plugin definiert haben, muss die Rake-Task sie als Rails::Plugin::Foo anstelle von einfach Foo referenzieren.

Wenn dies Ihr Problem nicht lösen, dann versuchen puts "Check" auf der ersten Zeile der init.rb Plugin-Datei hinzuzufügen, und stellen Sie sicher, dass Check angezeigt, wenn Sie Ihre Rake-Task ausführen. Wenn dies der Fall ist, wird das Plug-In geladen, aber möglicherweise wird es danach still ausgeführt.

Eine letzte Sache: vielleicht versuchen Sie, das Plugin außerhalb der Aufgabe, zum Beispiel am Anfang Ihrer Rake-Datei, in einigen Initialisierungscode zu verwenden? Wenn dies der Fall ist, wird es fehlschlagen, weil die Plugins nur geladen werden, wenn die Task ausgeführt wird (wenn die Umgebung geladen ist).

Hoffe, das hilft.

Verwandte Themen