Procesamiento en Background y Envío de Correos con Rails

Clase 30 de 33Curso de Creación de APIs con Ruby on Rails

Resumen

¿Cómo utilizar Active Job para procesamiento en background?

El mundo de las aplicaciones Rails es amplio y versátil, especialmente cuando se trata de manejar tareas pesadas sin afectar el rendimiento del usuario. Active Job es la herramienta predilecta para realizar tareas en el background en Rails. Pero ¿cómo comenzar a utilizarlo de manera efectiva en tu proyecto?

Para crear un job usando Active Job, podemos aprovechar un generador de Rails que nos facilita la creación de la estructura básica. Por ejemplo, el comando rails g job post_report nos permitirá crear un job llamado PostReportJob. Este generador no solo crea la clase del job, sino también una prueba asociada, ayudándonos a mantener la calidad del código desde el inicio.

¿Cuál es la estructura de un Active Job en Rails?

La clase PostReportJob generada hereda de ApplicationJob. Esta estructura permite un manejo eficiente de las tareas background sin requerir configuraciones complejas. Aunque existen otras implementaciones como Redis o Sidekiq para gestionar colas, en este ejemplo usamos el threadpool por defecto de Rails, que no requiere configuraciones adicionales para su funcionamiento básico.

Dentro del job, al definir nuestro método principal, podemos establecer los parámetros requeridos. Aconsejamos utilizar identificadores ligeros como IDs para evitar problemas al pasar datos complejos.

class PostReportJob < ApplicationJob
  queue_as :default

  def perform(*args)
    # lógica del job
  end
end

¿Cómo generar reportes de posts?

Cuando un usuario necesita un reporte de un post, un enfoque efectivo es crear clases dedicadas para representar diferentes tipos de datos dentro de la aplicación, aunque sean sencillas. Esto facilita el crecimiento y mantenimiento de estas estructuras con el tiempo.

Para este ejemplo, crearemos una clase PostReport que calculará el número de palabras del post y un histograma de palabras. Un histograma cuenta las repeticiones de palabras, lo que nos da una visión del contenido del post.

¿Qué es un histograma de palabras y cómo se implementa?

Un histograma de palabras es esencialmente un conteo que indica cuántas veces se repite cada palabra en el texto. La implementación en Ruby puede aprovechar métodos como split, map, gsub, y group_by. A continuación, se muestra cómo transformar un texto en un histograma:

def calcular_histograma(post)
  palabras = post.content.split.map do |palabra|
    palabra.gsub(/\W/, '').downcase
  end

  palabras.group_by { |palabra| palabra }.transform_values(&:size)
end

Esta función toma el contenido de un post, lo divide en palabras, elimina signos de puntuación y las coloca en minúsculas antes de agruparlas por su valor y contar su tamaño.

¿Cuál es el siguiente paso después de generar el reporte?

Una vez generamos el reporte podemos pensar en la entrega, como enviarlo por correo al usuario. En futuras clases, se puede explorar el uso de Action Mailer para enviar correos con Rails, complementando así el uso de Active Job y proporcionando una experiencia de usuario robusta y completa. Aprovechar las herramientas que Rails ofrece nos permite manejar tareas complejas y mejorar el rendimiento de forma eficiente. ¡Sigue explorando y aplicando estas técnicas en tus proyectos para obtener grandes resultados!