Można użyć invoke
i reenable
wykonać zadanie po raz drugi.
Twój przykładowy numer rake blog:post Title
wydaje się mieć parametr. Parametr ten może być używany jako parametr w invoke
:
Przykład:
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')
Proszę wymienić mytask
z blog:post
i zamiast definicja zadanie można require
swoją Rakefile.
To rozwiązanie zapisze wynik na stdout - ale nie wspomniałeś, że chcesz pominąć wyjście.
ciekawy eksperyment:
można nazwać reenable
również wewnątrz definicji zadań. Dzięki temu zadanie może zostać ponownie włączone.
przykład:
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')
Wynik (testowane nachylenia 10.4.2)
"called mytask (one)"
"called mytask (two)"
z szyn 3,1 grabie/rdoctask jest przestarzała i zadania/szyn nie ma. Powyższe działa dobrze tylko z pierwszym wymaganiem. – jwadsack
Aby zmienić standardowe wyjście, sugeruję zapisanie oryginalnego strumienia przez '# dup', następnie # # ponowne otwarcie' do 'Tempfile', który jest czytany po ponownym otwarciu do oryginału. Samo przypisanie '$ stdout' nie będzie działać, jeśli zadanie używa stałej' STDOUT' lub uruchamia zewnętrzny program. – Kelvin
Należy pamiętać, że 'rake_require' zawsze łączy daną ścieżkę z każdą ścieżką z tablicy' $ LOAD_PATH' i sprawdza istnienie pliku. Zatem pierwszym argumentem powinna być ** względna ścieżka **. Będzie traktowany jako względny, nawet jeśli zawiera wiodący ukośnik (lub ukośnik odwrotny w systemach innych niż systemy uniksowe). – siefca