Puede utilizar invoke
y reenable
para ejecutar la tarea por segunda vez.
Su llamada de ejemplo rake blog:post Title
parece tener un parámetro. Este parámetro se puede utilizar como un parámetro en invoke
:
Ejemplo:
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')
Por favor, vuelva a colocar mytask
con blog:post
y en lugar de la definición de tarea que puede require
su Rakefile.
Esta solución escribirá el resultado en stdout, pero no mencionó que desea suprimir la salida.
experimento interesante:
Usted puede llamar a la reenable
también dentro de la definición de la tarea. Esto permite que una tarea vuelva a activarse.
Ejemplo:
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')
El resultado (probado con el rastrillo 10.4.2):
"called mytask (one)"
"called mytask (two)"
con los carriles de 3.1 el rastrillo/rdoctask ha quedado obsoleto y tareas/raíles que falta. Lo anterior funciona bien solo con la primera declaración de requerimiento. – jwadsack
Para cambiar la salida estándar, sugiero guardar la secuencia original a través de '# dup', luego' # reopen' a un 'Tempfile' que se lee después de volver a abrir el original. Simplemente asignando '$ stdout' no funcionará si la tarea usa la constante' STDOUT', o ejecuta un programa externo. – Kelvin
Tenga en cuenta que 'rake_require' siempre une la ruta dada con cada ruta de la matriz' $ LOAD_PATH' y comprueba la existencia de un archivo. Entonces, el primer argumento debería ser ** una ruta relativa **. Se tratará como relativo, incluso si contiene una barra diagonal (o barra diagonal inversa en sistemas que no son de Unix). – siefca