Posso aggiungere un servizio runit in un plugin?

Ciao, mi chiedevo se sia possibile aggiungere un servizio runit in un plugin. Se non è possibile, sarei felice di conoscere le vostre strategie per gestire questo tipo di problema: ho un programma C++ di lunga durata che deve essere eseguito accanto a Discourse. Dovrebbe essere riavviato automaticamente e comportarsi fondamentalmente come un demone. Grazie mille!

Puoi installare cose all’interno di app.yml ed eseguire comandi di sistema all’interno di Rails per verificare ed eseguire operazioni. Potresti incapsulare un dispatcher in un job regolare?

È davvero scomodo. Idealmente, tutto dovrebbe avvenire nel plugin.
Grazie per la risposta. :slight_smile: :+1:

Il pattern mi sembra quello corretto, dato che i template sono simili ai docker compose.

Lo uso per clonare e creare un frotz semplice nel plugin Discourse Frotz. È solido come una roccia.

Per alcuni lavori di lunga durata in un plugin che ho scritto, ho utilizzato l’interfaccia dei lavori per avviare alcune attività Ansible che possono richiedere ore per essere completate.

Ma se si tratta di qualcosa di “adiacente”, allora un template nello app.yml sembra appropriato; se invece è “avviato da Discourse”, allora ha senso utilizzare un lavoro.

No, non è possibile. All’interno del container, tutto il codice del plugin viene eseguito come utente discourse. Tale utente non dispone di permessi sufficienti (ancora all’interno del container) per controllare i servizi runit.

Eseguite il processo in un altro container Docker sullo stesso hardware. Dovrebbe ascoltare su una porta TCP locale. Esportate l’URL per connettersi all’altro servizio nel blocco env: di app.yaml, ad esempio:

env:
    CUSTOM_SERVICE_URL: 'localhost:5309'

Fate in modo che il plugin recuperi la stringa di connessione tramite ENV["CUSTOM_SERVICE_URL"].