¿Puedo agregar un servicio runit en un plugin?

Hola, me preguntaba si es posible agregar un servicio runit en un plugin. Si eso no es posible, me gustaría conocer sus estrategias para abordar este tipo de problemas: tengo un programa en C++ de ejecución prolongada que debe ejecutarse junto con Discourse. Debe reiniciarse automáticamente y comportarse básicamente como un daemon. Muchas gracias.

Puedes instalar cosas dentro de app.yml y ejecutar comandos del sistema dentro de Rails para verificar y ejecutar tareas. ¿Podrías envolver un despachador en un trabajo regular?

2 Me gusta

esto es realmente engorroso. Idealmente, todo debería ocurrir dentro del plugin.
gracias por tu respuesta. :slight_smile: :+1:

El patrón me parece el correcto, ya que las plantillas son similares a los docker-compose.

Lo utilizo para clonar y crear un frotz básico en el plugin Frotz de Discourse. Es totalmente fiable.

2 Me gusta

Para algunas tareas de larga duración en un plugin que escribí, utilicé la interfaz de trabajos para ejecutar tareas de Ansible que pueden tardar horas en completarse.

Pero si es “junto a” algo, parece apropiado usar una plantilla en app.yml; si es “iniciado por Discourse”, entonces tiene sentido usar un trabajo.

2 Me gusta

No. Dentro del contenedor, todo el código del plugin se ejecuta como el usuario discourse. Ese usuario no tiene permisos suficientes (dentro del contenedor, de nuevo) para controlar los servicios runit.

Ejecute el proceso en otro contenedor Docker en el mismo hardware. Debería escuchar en un puerto TCP local. Exporte la URL para conectarse al otro servicio en el bloque env: de app.yaml, por ejemplo:

env:
    CUSTOM_SERVICE_URL: 'localhost:5309'

Haga que el plugin obtenga la cadena de conexión mediante ENV["CUSTOM_SERVICE_URL"].

2 Me gusta