Articulo de referencia

Rake (software)

{{cite web|date=April 5, 2024|title=Release v13.2.1 · ruby/rake · GitHub|url=https://github.com/ruby/rake/releases/tag/v13.2.1|website=GitHub|access-date=June 21, 2024}} "},"lat...

Rake es una herramienta de gestión de tareas de software y automatización de compilaciones creada por Jim Weirich . Permite al usuario especificar tareas, describir dependencias y agruparlas en espacios de nombres. Es similar a SCons y Make . Rake fue escrito en Ruby y forma parte de la biblioteca estándar de Ruby desde la versión 1.9. [ 2 ] [ 3 ]

Ejemplos

Las tareas que deben ejecutarse deben definirse en un archivo de configuración llamado Rakefile. Un Rakefile no tiene una sintaxis especial y contiene código Ruby ejecutable. [ 4 ]

Tareas

La unidad básica en Rake es la tarea. Una tarea tiene un nombre y un bloque de acción que define su funcionalidad. El siguiente código define una tarea llamada `greet` que mostrará el texto "¡Hola, Rake!" en la consola. [ 5 ]

tarea :saludar hacer puts "¡Hola, Rake!" fin

Al definir una tarea, opcionalmente se pueden agregar dependencias; es decir, una tarea puede depender de la finalización exitosa de otra. Al llamar a la tarea "seed" del siguiente ejemplo, primero se ejecutará la tarea "migrate" y solo después se procederá con la ejecución de la tarea "seed". [ 5 ]

tarea :seed => :migrate hacer # Esta tarea se ejecutará después de que finalice la tarea :migrate

Las tareas también pueden hacerse más versátiles aceptando argumentos. Por ejemplo, la tarea "generate_report" aceptará una fecha como argumento. Si no se proporciona ningún argumento, se utilizará la fecha actual. [ 5 ]

tarea :generate_report , [ :date ] hacer | t , args | report_date = args [ :date ] || Date . today # Generar el informe en función de la fecha especificada fin

Un tipo especial de tarea es la tarea de archivo, que se puede usar para especificar tareas de creación de archivos. La siguiente tarea, por ejemplo, recibe dos archivos objeto, es decir, "ao" y "bo", para crear un programa ejecutable. [ 6 ]

archivo "prog" => [ "ao" , "bo" ] hacer | t | sh "cc -o #{ t . nombre } #{ t . prerequisitos . unir ( ' ' ) } " fin

Otra herramienta útil es el método de conveniencia de directorios, que se puede utilizar para crear directorios bajo demanda. [ 7 ]

directorio "testdata/examples/doc"

Normas

Cuando un archivo se nombra como requisito previo pero no tiene una tarea de archivo definida para él, Rake intentará sintetizar una tarea consultando una lista de reglas proporcionadas en el Rakefile. Por ejemplo, supongamos que intentamos invocar la tarea "mycode.o" sin ninguna tarea definida para ella. Si el Rakefile tiene una regla como esta:

regla '.o' => '.c' hacer | t | sh "cc #{ t . source } -c -o #{ t . name } " fin

Esta regla sintetizará cualquier tarea que termine en ".o". Como requisito previo, debe existir un archivo fuente con la extensión ".c". Si Rake encuentra un archivo llamado "mycode.c", creará automáticamente una tarea que compila "mycode.o" a partir de "mycode.c". Si el archivo "mycode.c" no existe, Rake intentará sintetizar recursivamente una regla para él.

Cuando una tarea se sintetiza a partir de una regla, el atributo de origen de la tarea se establece en el archivo de origen correspondiente. Esto permite a los usuarios escribir reglas con acciones que hacen referencia al archivo de origen. [ 8 ]

Reglas avanzadas

Se puede utilizar cualquier expresión regular como patrón de regla. Además, se puede usar un procedimiento almacenado para calcular el nombre del archivo fuente. Esto permite el uso de patrones y fuentes complejos.

La siguiente regla es equivalente al ejemplo anterior:

regla ( /\.o$/ => -> ( t_name ){ t_name . sub /\.o$/ , '.c' }) hacer | t | sh "cc #{ t . source } -c -o #{ t . name } " fin

NOTA: Debido a una peculiaridad en la sintaxis de Ruby, se requieren paréntesis alrededor de una regla cuando el primer argumento es una expresión regular.

La siguiente regla podría utilizarse para archivos Java: [ 9 ]

regla '.class' => -> ( t_name ){ t_name . sub ( /\.class$/ , '.java' ) . sub ( /^classes\// , 'src/' ) } hacer | t | java_compile ( t . source , t . name ) fin

Espacios de nombres

Para organizar mejor los archivos Rakefile grandes, las tareas se pueden agrupar en espacios de nombres. [ 10 ] A continuación se muestra un ejemplo de una receta Rake simple:

namespace :cake do desc 'hacer panqueques' task :pancake => [ :flour , :milk , :egg , :baking_powder ] do puts "chisporrotear" end task :butter do puts "cortar 3 cucharadas de mantequilla en cuadraditos" end task :flour => :butter do puts "amasar los cuadraditos de mantequilla con las manos hasta incorporarlos a 1 1/2 tazas de harina" end task :milk do puts "agregar 1 1/4 tazas de leche" end task :egg do puts "agregar 1 huevo" end task :baking_powder do puts "agregar 3 1/2 cucharaditas de levadura en polvo" end end

Véase también

Referencias

  1. "Versión v13.2.1 · ruby/rake · GitHub" . GitHub . 5 de abril de 2024. Consultado el 21 de junio de 2024 .
  2. "Rastrillo -- Ruby Make" . s.f. Consultado el 28 de febrero de 2024 .
  3. "NOTICIAS" . Archivado del original el 4 de marzo de 2016. Consultado el 29 de febrero de 2024 .
  4. "Formato de Rakefile" . GitHub . Consultado el 21 de junio de 2024 .
  5. 1 2 3 "Tutorial de Ruby on Rails: Entendiendo Rake y la automatización de tareas" . 10 de junio de 2019. Consultado el 21 de junio de 2024 .
  6. "Rakefile Format # File Tasks" . GitHub . Consultado el 21 de junio de 2024 .
  7. "Rakefile Format # Direct Tasks" . GitHub . Consultado el 21 de junio de 2024 .
  8. "Reglas del formato Rakefile" . GitHub . Consultado el 21 de junio de 2024 .
  9. "Formato de Rakefile # Reglas avanzadas" . GitHub . Consultado el 21 de junio de 2024 .
  10. "Formato de Rakefile # Espacios de nombres" . GitHub . Consultado el 21 de junio de 2024 .
  • Documentación de Rake