können Sie verwenden invoke
und reenable
die Aufgabe ein zweites Mal auszuführen.
Ihr Beispiel Anruf rake blog:post Title
scheint einen Parameter zu haben. Dieser Parameter kann in invoke
als Parameter verwendet werden:
Beispiel:
require 'rake'
task 'mytask', :title do |tsk, args|
p "called #{tsk} (#{args[:title]})"
end
Rake.application['mytask'].invoke('one')
Rake.application['mytask'].reenable
Rake.application['mytask'].invoke('two')
Bitte ersetzen mytask
mit blog:post
und stattdessen die Aufgabendefinition können Sie Ihre Rakefile require
.
Diese Lösung wird das Ergebnis auf stdout schreiben - aber Sie haben nicht erwähnt, dass Sie die Ausgabe unterdrücken möchten.
interessantes Experiment:
Sie können die reenable
rufen auch in der Aufgabendefinition. Dies ermöglicht es einer Aufgabe, sich selbst wieder zu aktivieren.
Beispiel:
require 'rake'
task 'mytask', :title do |tsk, args|
p "called #{tsk} (#{args[:title]})"
tsk.reenable #<-- HERE
end
Rake.application['mytask'].invoke('one')
Rake.application['mytask'].invoke('two')
Das Ergebnis (getestet mit Harke 10.4.2):
"called mytask (one)"
"called mytask (two)"
Mit Rails 3.1 der Rechen/rdoctask ist veraltet und Aufgaben/Schienen fehlt. Das obige funktioniert nur mit der ersten require-Anweisung. – jwadsack
Zum Ändern der Standardausgabe empfehle ich, den ursprünglichen Stream über '# dup' zu speichern, und dann' # reopen' in eine 'Tempdatei', die nach dem erneuten Öffnen des Originals gelesen wird. Das bloße Zuweisen von '$ stdout' funktioniert nicht, wenn die Task die' STDOUT'-Konstante verwendet oder ein externes Programm ausführt. – Kelvin
Beachten Sie, dass 'rake_require' immer den angegebenen Pfad mit jedem Pfad aus dem '$ LOAD_PATH'-Array verknüpft und auf das Vorhandensein einer Datei prüft. Das erste Argument sollte also ein ** relativer Pfad ** sein. Es wird als relativ behandelt, auch wenn es einen führenden Schrägstrich (oder umgekehrten Schrägstrich auf Nicht-Unix-Systemen) enthält. – siefca