Introducción a las "Rake tasks"

Introducción a las "Rake tasks"

Hola, hoy les propongo una pequeña introducción a las tareas rake ( rake tasks ).

Las tareas rake son una forma de definir tareas reutilizables y automatizadas en una aplicación Ruby.

Pueden utilizarse para realizar una gran variedad de tareas, como la migración de bases de datos, la creación de informes, la sincronización de datos, etc.

Es muy probable que ya se hayan encontrado con "rake tasks" si han utilizado un framework como Ruby on Rails al menos una vez en su vida.

¿Cómo utilizar tareas rake?

Para utilizar tareas rake en un proyecto Ruby, primero deben instalar la gema Rake añadiendo la línea gem 'rake' al archivo Gemfile de su aplicación, y luego ejecutando bundle install.

Una vez que Rake está instalado, pueden crear tareas creando un archivo .rake en el directorio lib/tasks de su aplicación. En ese archivo, pueden usar el método task de Rake para definir su tarea de la siguiente manera:

namespace :my_tasks do
  desc "Description of my task"
  task :task_name => :environment do
    # code to execute the task goes here
  end
end

Pequeña explicación: el método task toma como primer argumento el nombre de la tarea (aquí, :task_name) y como segundo argumento una lista de dependencias (aquí, :environment). Pueden definir una descripción de la tarea con el método desc.

Para ejecutar su tarea recién creada, pueden usar el comando rake task_name en su terminal.

Si desean listar las tareas que han definido en su archivo .rake, pueden usar el comando rake -T que mostrará la lista de todas las tareas disponibles, con su descripción.

Existen muchas otras opciones y métodos disponibles para personalizar y ampliar las tareas rake de su aplicación; desarrollaremos eso en las siguientes partes.

Ir más allá usando argumentos

Podemos enriquecer las posibilidades de las tareas rake permitiendo que acepten argumentos para su ejecución. Aquí tienen un ejemplo:

namespace :my_tasks do
  desc "Print a message"
  task :print_message, [:message] => :environment do |t, args|
    puts args[:message]
  end
end

Para ejecutar esta tarea y pasarle un argumento, usemos el siguiente comando:

rake print_message[hello]

Esta tarea, como habrán entendido, mostrará el mensaje "hello" en el terminal.

Aquí tienen otro ejemplo de tarea Rake que acepta varios argumentos:

namespace :my_tasks do
  desc "Print a message multiple times"
  task :print_message_multiple, [:message, :count] => :environment do |t, args|
    args[:count].to_i.times do
      puts args[:message]
    end
  end
end

Para ejecutar esta tarea y pasarle dos argumentos, usemos el siguiente comando:

rake print_message_multiple[hello,5]

Esta tarea mostrará el mensaje "hello" cinco veces en el terminal.

¿Y Ruby on Rails en todo esto?

Como se indicó más arriba en el artículo, Ruby on Rails utiliza rake para ofrecer toda una lista de comandos utilitarios muy prácticos para ayudarnos en el desarrollo. Estos comandos van desde la generación de controladores y modelos, hasta comandos que permiten listar información, por ejemplo la lista de rutas disponibles dentro de nuestra aplicación.

Ustedes también pueden crear sus propias tareas para enriquecer las posibilidades de su aplicación Rails.

Aquí tienen un ejemplo:

namespace :db do
  desc "Fill the database with sample data"
  task :populate => :environment do
    # Create some sample data here
    User.create(name: "John", email: "john@example.com")
    User.create(name: "Jane", email: "jane@example.com")
    # ...
  end
end

Esta tarea crea registros de datos de ejemplo en la tabla users de la base de datos de la aplicación.

Esta tarea puede ser útil para rellenar la base de datos con datos de prueba o para crear un conjunto de datos de demostración para una aplicación.

Para ejecutar esta tarea:

rake db:populate

Aquí tienen otro ejemplo de tarea Rake que puede ser útil en una aplicación Ruby on Rails:

namespace :emails do
  desc "Send a reminder email to all users who have not logged in for 30 days"
  task :send_reminders => :environment do
    users = User.where("last_login < ?", 30.days.ago)
    users.each do |user|
      UserMailer.login_reminder(user).deliver_now
    end
  end
end

Esta tarea envía un correo de recordatorio a todos los usuarios que no se han conectado en 30 días.

Para ejecutar esta tarea:

rake emails:send_reminders

Consolidar sus conocimientos

Para profundizar, les recomiendo consultar estos recursos:

¡Espero que este artículo les dé una idea de lo que pueden hacer con las tareas Rake, en sus futuros proyectos Ruby!

Etiquetas

  • ruby

  • api

Este artículo fue publicado el

Comentarios

Cargando...