Schienen, wie die Rechenaufgabe ausgeführt wird

92

Wie führe ich diese Rake-Datei in Terminal / Konsole aus?

meine statistik.rake in lib / aufgaben

desc "Importer statistikker"
namespace :reklamer do
  task :iqmedier => :environment do
    ...
  end
  task :euroads => :environment do
    ...
  end
  task :mikkelsen => :environment do
    ...
  end
  task :orville => :environment do
    ...
  end
end
Schienen Anfänger
quelle

Antworten:

126

Sie können Rake-Aufgaben von Ihrer Shell aus ausführen, indem Sie Folgendes ausführen:

rake task_name

So führen Sie Ruby aus aus (z. B. in der Rails-Konsole oder einer anderen Rake-Aufgabe):

Rake::Task['task_name'].invoke

Um mehrere Aufgaben im selben Namespace mit einer einzigen Aufgabe auszuführen, erstellen Sie die folgende neue Aufgabe in Ihrem Namespace:

task :runall => [:iqmedier, :euroads, :mikkelsen, :orville] do
  # This will run after all those tasks have run
end
Andrew Marshall
quelle
1
Wie rechne ich alle Aufgaben gleichzeitig oder muss ich den Namespace in eine Aufgabe ändern?
Rails Anfänger
1
Wenn Sie alle Aufgaben gleichzeitig ausführen möchten, machen Sie task: all => [: a ,: b ,: c] und führen Sie dann rake reklamer: all aus
Spike Gronim
1
Das war nicht Teil Ihrer Frage, aber Sie müssten eine neue Aufgabe erstellen, die jeden von ihnen aufruft, für die es eine Abkürzung gibt. Siehe meine aktualisierte Antwort.
Andrew Marshall
1
@ Andrew Marshall, übrigens, können Sie verwenden, task :runall => Rake::Task.taskswenn Sie alle Aufgaben ausführen möchten. Diese Zeile muss jedoch nach allen Aufgaben deklariert werden.
Vasiliy Ermolovich
Wohin soll die Aufgabe: runall => gehen?
Rails Anfänger
25
Rake::Task['reklamer:orville'].invoke

oder

Rake::Task['reklamer:orville'].invoke(args)
Luke W.
quelle
Dieser Ansatz wird funktionieren, aber der "richtige" Weg, Raks-Aufgaben zu bündeln, wurde von @ andrew-marshall beantwortet.
Tom Harrison
3
Bitte geben Sie eine Referenz an, wenn Sie etwas wie "den" richtigen "Weg ..." sagen wollen. Meine Antwort war eine Antwort auf die ursprüngliche Frage.
Luke W
3
Als theoretischer Test habe ich versucht zu laufen, Rake::Task['db:seed'].invokeaber es läuft nicht und sagte: "Ich weiß nicht, wie man die Aufgabe 'db: seed' erstellt"
lulalala
21

Hast du es versucht rake reklamer:iqmedier?

Meine benutzerdefinierten Rake-Tasks befinden sich im lib-Verzeichnis, nicht in lib / task. Ich bin mir nicht sicher, ob das wichtig ist.

CharlieMezak
quelle
1
Ich möchte alle Aufgaben auf einmal ausführen
Rails Anfänger
13

Manchmal werden Ihre Rechenaufgaben nicht in die Konsole geladen. In diesem Fall können Sie die folgenden Befehle ausführen

require "rake"
YourApp::Application.load_tasks
Rake::Task["Namespace:task"].invoke
Prem
quelle
Diese Zitate sind schlecht, aber ich kann sie nicht bearbeiten, weil sie zu klein sind!
Nroose
Auch wenn dies keine echte Antwort auf die gestellte Frage ist. Dies ist, wonach ich gesucht und mein Problem gelöst habe (YourApp :: Application.load_tasks). Vielen Dank!
Dennis van de Hoef
3

Wenn Sie sich nicht sicher sind, wie Sie eine Rechenaufgabe ausführen sollen, müssen Sie zunächst herausfinden, welche Aufgaben Sie haben. Außerdem werden die Befehle zum Ausführen der Aufgaben aufgelistet.

Führen Sie rake --tasksauf dem Terminal.

Die Aufgaben werden wie folgt aufgelistet:

rake gobble:dev:prime             
rake gobble:dev:reset_number_of_kits                                    
rake gobble:dev:scrub_prod_data

Sie können Ihre Aufgabe dann ausführen mit: rake gobble:dev:primewie aufgelistet.

Ruto Collins
quelle
1

In Rails 4.2 haben die oben genannten Methoden nicht funktioniert.

  1. Gehe zum Terminal.
  2. Ändern Sie das Verzeichnis an den Speicherort, an dem sich Ihre Rake-Datei befindet.
  3. Führen Sie rake task_name aus.
  4. Führen Sie im obigen Fall rake iqmedier aus - führt nur die iqmedir-Task aus.
  5. Rake-Euroads ausführen - führt nur die Euroads-Aufgabe aus.
  6. Um alle Aufgaben in dieser Datei auszuführen, weisen Sie Folgendes in derselben Datei zu und führen Sie rake all aus

    task :all => [:iqmedier, :euroads, :mikkelsen, :orville ] do #This will print all the tasks o/p on the screen 
    end
Hari
quelle