Salut, je me demandais s’il était possible d’ajouter un service runit dans un plugin ? Si ce n’est pas possible, je serais ravi d’entendre vos stratégies pour gérer ce type de problème : j’ai un programme C++ de longue durée qui doit s’exécuter à côté de Discourse. Il doit redémarrer automatiquement et se comporter essentiellement comme un démon. Merci beaucoup !
Vous pouvez installer des éléments dans app.yml et exécuter des commandes système dans Rails pour vérifier et exécuter diverses tâches. Pourriez-vous envelopper un dispatcheur dans un job standard ?
C’est vraiment fastidieux. Idéalement, tout devrait se faire dans le plugin.
Merci pour votre réponse.
![]()
Le modèle me semble être le bon, car les templates sont similaires aux compositions Docker.
Je l’utilise pour cloner et créer un Frotz basique dans le plugin Discourse Frotz. C’est extrêmement fiable.
Pour certains travaux de longue durée dans un plugin que j’ai écrit, j’ai utilisé l’interface des tâches pour lancer des tâches Ansible qui peuvent prendre plusieurs heures à s’exécuter.
Mais si c’est « à côté », un modèle dans app.yml semble approprié ; si c’est « lancé par Discourse », une tâche fait sens.
Non. À l’intérieur du conteneur, tout le code du plugin s’exécute sous l’utilisateur discourse. Cet utilisateur ne dispose pas des permissions suffisantes (toujours à l’intérieur du conteneur) pour contrôler les services runit.
Exécutez le processus dans un autre conteneur Docker sur le même matériel. Il doit écouter sur un port TCP local. Exportez l’URL de connexion vers l’autre service dans le bloc env: de app.yaml, par exemple :
env:
CUSTOM_SERVICE_URL: 'localhost:5309'
Faites en sorte que le plugin récupère la chaîne de connexion via ENV["CUSTOM_SERVICE_URL"].