Procesamiento en Background y Envío de Correos con Rails
Clase 30 de 33 • Curso de Creación de APIs con Ruby on Rails
Contenido del curso
Proyecto
- 3

Creación de APIs con Rails: Proyecto Blog API paso a paso
04:37 min - 4

Configuración de Gemas para Pruebas en Proyectos Rails
06:26 min - 5

Configuración de Gemas en Proyectos Rails: Arspec, Factory Bot y Database Cleaner
07:25 min - 6

Implementación de un Health Check Endpoint en API con RSpec
12:28 min - 7

Diseño de Casos de Uso y Diagramas de Entidad para Aplicaciones
03:16 min - 8

Diagrama entidad relación: usuario y post
01:41 min - 9

Modelado de Aplicaciones con TDD en Rails
05:59 min - 10

Validaciones y Pruebas TDD en Rails: Modelos USR y Post
07:07 min - 11

Implementación de Endpoints para Listar y Mostrar Posts con TDD
15:12 min - 12

Implementar controlador Posts con TDD
10:34 min - 13

Pruebas TDD para crear y actualizar posts
10:12 min - 14

Implementación de Métodos y Manejo de Excepciones en Rails API
10:23 min - 15

Active Model serializers: control total de JSON en Rails
06:03 min - 16

Búsqueda y Filtrado de Posts por Título con TDD
05:57 min - 17

Implementación de Búsqueda de Posts con Servicios en Rails
06:06 min - 18

Problema N+1 en Rails: Detección y Solución Eficaz
04:40 min - 19

Identificación y solución del problema N+1 en Rails
06:20 min - 20

Flujo de Autenticación en APIs con Tokens y Proveedores
05:29 min - 21

Tests con RSpec para autenticación de tokens
12:17 min - 22

Autenticación con Tokens: Implementación en Rails API
05:53 min - 23

Autenticación de Usuarios en Controladores Rails
09:19 min - 24

Autenticación y Seguridad en CRUD de Posts en Rails
09:17 min - 25

Pruebas de Creación y Actualización con Autenticación en Rails
14:21 min - 26

Probando API Ruby on Rails con Postman
10:43 min - 27

Caching en Aplicaciones Web: Funciones y Niveles
07:15 min - 28

Aceleración de Búsquedas en Rails con Caching
08:23 min - 29

Background Jobs en Rails: Conceptos y Funcionalidades
05:45 min - 30

Procesamiento en Background y Envío de Correos con Rails
Viendo ahora - 31

Envío de Correos en Rails con ActionMailer y Background Jobs
11:06 min - 32
Autenticación y Autorización con JWT y Auth0 en Aplicaciones Web
03:48 min
Cierre
Domina el procesamiento en background en Rails con Active Job y prepara el envío de correos con ActionMailer. Aquí verás cómo generar un job que calcula un reporte de un post con conteo de palabras y histograma, siguiendo buenas prácticas: pasar IDs ligeros, usar clases modelo para datos y limpiar texto con Ruby.
¿Cómo integrar Active Job y ActionMailer en Rails sin gemas?
Rails incluye Active Job y ActionMailer, por lo que no se requieren dependencias externas. Además, hay generadores que crean la estructura base de forma rápida.
- Generador de job:
rails g job PostReport. - Clase del job: hereda de
ApplicationJoby defineperform. - Cola por defecto: anotación queue_as :default.
- Adaptadores externos: Redis o Sidekiq permiten colas y prioridades.
- Implementación por defecto: usa un thread pool; suficiente para empezar.
La recomendación clave es pasar IDs y no objetos completos. Así evitas problemas de serialización y mantienes mensajes ligeros. Con el ID se busca luego el registro con Rails.
¿Qué conviene pasar al job: IDs o modelos?
- Pasa
user_idypost_iden lugar de objetosUseroPost. - Dentro del job, busca con
User.findyPost.find. - Minimiza dependencias y evita cargas innecesarias.
rails g job PostReport
# app/jobs/post_report_job.rb
class PostReportJob < ApplicationJob
queue_as :default
def perform(user_id, post_id)
user = User.find(user_id)
post = Post.find(post_id)
report = PostReport.generate(post)
# Luego: usar ActionMailer para enviar el correo con report.
end
end
¿Qué hace el background job PostReportJob?
El job genera un reporte de un post para un usuario y, en una fase posterior, se enviará por correo. Ese reporte incluye conteo de palabras y histograma de palabras. Crear una clase dedicada es una buena práctica: facilita crecer sin complicaciones.
¿Cómo estructurar la clase PostReport para escalar?
- Define una clase
PostReportenapp/models. - Centraliza la lógica en un método de clase
generate. - Expone atributos claros:
word_countyword_histogram.
# app/models/post_report.rb
class PostReport
attr_reader :word_count, :word_histogram
def initialize(word_count:, word_histogram:)
@word_count = word_count
@word_histogram = word_histogram
end
def self.generate(post)
words = post.content.split
.map { |w| w.gsub(/\W+/, "") }
.reject(&:empty?)
new(
word_count: words.count,
word_histogram: calc_histogram(words)
)
end
def self.calc_histogram(words)
words.map(&:downcase)
.group_by { |w| w }
.transform_values(&:size)
end
end
¿Cómo calcular word count e histograma con Ruby?
Para el conteo de palabras, se parte del contenido del post, se divide por espacios y se limpia la puntuación con gsub. Para el histograma, se normaliza todo a downcase, se agrupa con group_by y se cuenta con transform_values y size.
¿Cómo limpiar y normalizar el texto?
- Separar por espacios:
split. - Quitar puntuación: gsub con la expresión
/\W+/. - Evitar vacíos:
reject(&:empty?). - Normalizar: downcase.
content = "Hola, mundo. Hola!"
words = content.split
.map { |w| w.gsub(/\W+/, "") }
.reject(&:empty?)
# words => ["Hola", "mundo", "Hola"]
¿Cómo agrupar y contar ocurrencias?
- Agrupar por palabra: group_by.
- Contar por grupo: transform_values con size.
histogram = words.map(&:downcase)
.group_by { |w| w }
.transform_values(&:size)
# histogram => {"hola"=>2, "mundo"=>1}
¿Te gustaría ver el envío del correo con ActionMailer y cómo adjuntar este reporte? Comparte tus dudas o casos de uso en los comentarios.