Ich versuche, eine benutzerdefinierte Rechenaufgabe zu erstellen, aber anscheinend habe ich keinen Zugriff auf meine Modelle. Ich dachte, dies sei implizit in der Rails-Aufgabe enthalten.
Ich habe den folgenden Code in lib / task / test.rake:
namespace :test do
task :new_task do
puts Parent.all.inspect
end
end
Und so sieht mein Elternmodell aus:
class Parent < ActiveRecord::Base
has_many :children
end
Es ist ein ziemlich einfaches Beispiel, aber ich erhalte den folgenden Fehler:
/> rake test:new_task
(in /Users/arash/Documents/dev/soft_deletes)
rake aborted!
uninitialized constant Parent
(See full trace by running task with --trace)
Irgendwelche Ideen? Vielen Dank
ruby-on-rails
activerecord
rake
task
gmoniey
quelle
quelle
new_task
der aktuellen Umgebung zugewiesen? Was ist der aktuelle Wert von:environment
? Google hilft nicht.new_task
Laden Sie also beim Ausführen zuerst die Umgebung (laden Sie Ihre Modelle) und dann new_task.Möglicherweise müssen Sie Ihre Konfiguration benötigen (die alle erforderlichen Modelle usw. angeben sollte).
z.B:
Alternativ können Sie jedes einzeln anfordern, aber möglicherweise haben Sie Umgebungsprobleme, die AR nicht eingerichtet hat usw.)
quelle
Wenn Sie mit dem Schreiben Ihrer Rechenaufgaben beginnen , verwenden Sie einen Generator, um sie für Sie zu löschen.
Beispielsweise:
Sie erhalten einen in lib / task erstellten Stub mit dem Namen
my_tasks.rake
(verwenden Sie offensichtlich Ihren eigenen Namespace). Dieser sieht folgendermaßen aus:Alle Ihre Schienenmodelle usw. sind für die aktuelle Umgebung in jedem Taskblock verfügbar, es sei denn, Sie verwenden die Produktionsumgebung . In diesem Fall müssen Sie die spezifischen Modelle benötigen, die Sie verwenden möchten. Tun Sie dies im Rahmen der Aufgabe. (IIRC dies variiert zwischen verschiedenen Versionen von Rails.)
quelle
environment
dies als Abhängigkeit erforderlich ist, und dann die Syntax sagen, anstatt das OP zu ermutigen, sich auf "magische" Dienstprogramme zu verlassen, die nicht einmal Magie verwenden?Mit der neuen Ruby-Hash-Syntax (Ruby 1.9) wird die Umgebung der Rake-Aufgabe folgendermaßen hinzugefügt:
quelle
Die: Umgebungsabhängigkeit wird ganz korrekt angegeben, aber Rake weiß möglicherweise noch nichts über andere Edelsteine, von denen Ihre Modelle abhängen - in einem Fall von mir 'protected_attributes'.
Die Antwort ist zu laufen:
Dies garantiert, dass die Umgebung alle in Ihrer Gemfile angegebenen Edelsteine enthält.
quelle
Generieren Sie eine Aufgabe mit dem folgenden Befehl (Namespace mit Aufgabenname):
Verwenden Sie die folgende Syntax, um Logik hinzuzufügen:
Führen Sie die obige Aufgabe mit dem folgenden Befehl aus:
oder
quelle