Notificar a mi frontend que terminó un proceso en segundo plano con Sidekiq

8 views
Skip to first unread message

Johan Donado B.

unread,
Sep 29, 2018, 3:24:36 PM9/29/18
to ror-es

Saludos.

Tengo Activejobs configurado para usar Sidekiq y mis tareas se ejecutan sin problema en segundo plano.  La pregunta es cómo le informo al lado del frontend que mi tarea terminó?

La tarea crea un pdf (un grupo de archivos pdf comprimidos en un archivo zip realmente). Al terminar la tarea debe informar al frontend la ruta donde quedó el archivo para que lo descargue.

Alguien sabe cómo hacerlo?

Muchas gracias de antemano.

Francis

unread,
Sep 29, 2018, 3:30:19 PM9/29/18
to ror...@googlegroups.com
Como mencioné en el otro hilo, ajax polling o websockets son tus mejores opciones.

Ajax polling es más sencillo de implementar, consiste en hacer una llamada ajax cada (por ejemplo) 1s para preguntar si la tarea ha terminado. Tu tarea sidekiq debe almacenar en algún lado un flag para indicar que ha finalizado. Si desde tu servidor puedes saber si existe o no el fichero (no sé dónde lo almacenas) no hace falta ningún flag, simplemente miras si el archivo existe o no y lo devuelves a la llamada ajax del cliente.

Websockets es algo más complejo y te lo dejo como ejercicio si quieres :)

--
--
You received this message because you are subscribed to the Google
Groups "ror-es" group.
To post to this group, send email to ror...@googlegroups.com
To unsubscribe from this group, send email to
ror_es+un...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/ror_es?hl=en
Rails no escala.

---
You received this message because you are subscribed to the Google Groups "ror-es" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ror_es+un...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Johan Donado B.

unread,
Sep 29, 2018, 3:40:05 PM9/29/18
to ror-es

Gracias por responder.

Precisamente la parte de decirla a Sidekiq que guarde en algún lado el estado de la tarea, si la finalizó, si dio error y cómo se llama el archivo que se crea para descargar es lo que mes tiene varado.  He leído algo que eso lo puedo hacer con Redis, pero no encuentro claramente como hacerlo con Ruby.  Resolviendo este punto ya puedo hacer llamadas periódicas por ajax para leer ese estado guardado.

Francis

unread,
Sep 29, 2018, 3:49:54 PM9/29/18
to ror...@googlegroups.com
Guardalo en la bbdd que ya estés utilizando. Si el pdf se genera para un user_id, ten una tabla que relacione user_id y pdf_path. En frontend preguntará periódicamente cuál es el pdf_path para current_user.id. No conozco tu caso de uso, a lo mejor en vez de user_id tiene que ser report_id. Sin más contexto no te puedo decir.

Johan Donado B.

unread,
Sep 29, 2018, 4:00:37 PM9/29/18
to ror-es

Sí, eso voy a hacer.  Lo guardaré en mi base de datos MySQL.  Igual hice la pregunta por si había una manera estándar o "correcta" de hacerlo y no usando la base de datos regular.

Muchas gracias.
Reply all
Reply to author
Forward
0 new messages