Ejecutando scripts ruby personalizados

Puedo realizar las tareas que deseo utilizando la consola de Rails. Sin embargo, estas tareas deben ejecutarse periódicamente y no quiero escribir cada comando uno por uno en la consola de Rails. ¿Cómo puedo ejecutar un script de Ruby en mi instancia de Discourse autoalojada?

Además, el script leerá un archivo CSV, ¿dónde debo colocar este archivo CSV para que siga siendo accesible dentro del contenedor Docker y no desaparezca después de las actualizaciones?

Un enfoque es subir el archivo y luego almacenar la URL en una configuración. Subir un archivo evitará que se elimine.

Puede tener un trabajo que se ejecute en un plugin. Hay muchos ejemplos de trabajos en los plugins de Discourse y Pavilion.

1 me gusta

Me pregunto si mi caso de uso es más simple de lo que expliqué inicialmente. Normalmente hago lo siguiente:

./launcher enter app
rails c

> u= User.find(1)
> algo más de código aquí

Lo que me gustaría hacer:

./launcher enter app
./my_code.rb

donde my_code.rb contiene el contenido de lo que ejecuto en la consola de rails antes.

indicaste que querías “que las tareas se ejecuten periódicamente”.

si eso es ‘para toda la vida de la comunidad’, entonces vale la pena escribir tu propio plugin para hacer esto. No es mucho más difícil que entrar en la consola de Rails (¡desordenado y más arriesgado!).

También te permitirá almacenar el código, gestionarlo adecuadamente y refinarlo con el tiempo.

alternativamente, podrías definir una tarea de rastrillo, pero necesitarás almacenarla en algún lugar, ¡potencialmente también en un plugin!

2 Me gusta

Sí, fue una mala elección de palabras. Lo que quise decir fue lo siguiente: Necesito ejecutar este trabajo varias veces a lo largo de la vida de la comunidad. Sin embargo, no hay un período fijo y cuándo necesita ejecutarse lo determina algún evento externo. Así que ejecutaré la tarea yo mismo varias veces sin ningún intervalo de tiempo regular entre ellas.

Así que una tarea de rake podría ser tu solución preferida. Está diseñada a propósito para la ejecución de scripts ad hoc. Aun así, la pondría en un plugin, ya que puedes gestionarla bien en GitHub y nunca olvidarás dónde la pusiste ni la borrarás accidentalmente.

Aquí tienes un montón de ejemplos: discourse/lib/tasks at 1472e47aae5bfdfb6fd9abfe89beb186c751f514 · discourse/discourse · GitHub

2 Me gusta

Podrías convertirlo en una tarea de rake o incluirlo en un trabajo que deberías iniciar manualmente desde /sidekiq

Puedes subir tu csv desde la UX y pasarlo con un valor de configuración como se sugiere, o subirlo a un tema y hacer que tu script obtenga la publicación/carga más reciente en el tema, o subirlo a /var/discourse/shared/standalone/xxx.csv y acceder a él como /shared/xxx.csv en el script. O tal vez deberías hacer todo con la API en lugar de subir un archivo csv.

No describes lo que intentas hacer, solo tu solución que podría no ser la mejor.