2010-09-20 8 views
41

Digamos que tengo un Rakefile así:Cómo fallar explícitamente una tarea en ruby ​​rake?

file 'file1' => some_dependencies do 
    sh 'external tool I do not have control over, which sometimes fail to create the file' 
    ??? 
end 

task :default => 'file1' do 
    puts "everything's OK" 
end 

Ahora si pongo nada en lugar de ???, me sale el mensaje OK, incluso si la herramienta externa no puede generar archivo. ¿Cuál es la forma correcta de informar rake, esa tarea 'file1' ha fallado y debería abortar (con la esperanza de presentar un mensaje significativo, como qué tarea falló); el único pensamiento en el que puedo pensar ahora es presentar una excepción, pero eso simplemente no parece correcto.

P.S La herramienta siempre devuelve 0 como código de salida.

Respuesta

54

Utilice el método raise o fail como si se tratara de cualquier otro script Ruby (fail es un alias para raise). Este método toma una cadena o una excepción como un argumento que se utiliza como el mensaje de error que aparece al finalizar el script. Esto también hará que la secuencia de comandos devuelva el valor 1 al intérprete de comandos que realiza la llamada. Está documentado here y otros lugares.

+4

['fail'] (http://ruby-doc.org/core-2.0/Kernel.html#method-i-fail) es solo un alias de [' raise'] (http: // ruby- doc.org/core-2.0/Kernel.html#methodi-i-raise) – Stefan

+0

Tienes razón. Actualicé mi respuesta para indicar esto. –

+0

El enlace está roto. –

11

Puede usar abort("message") para fallar con elegancia la tarea de rake.

se imprimirá message a la salida estándar y la salida con el código 1.

Código de salida 1 se produce un fallo en los sistemas de tipo Unix.

Ver Kernel#abort para más detalles.

Cuestiones relacionadas