Hallo, ich frage mich, ob es möglich ist, einen runit-Dienst in einem Plugin hinzuzufügen? Falls das nicht möglich ist, würde ich mich sehr über eure Strategien zur Bewältigung solcher Probleme freuen: Ich habe ein langlebiges C+±Programm, das neben Discourse laufen muss. Es soll automatisch neu gestartet werden und sich im Grunde wie ein Daemon verhalten. Vielen Dank!
Du kannst Dinge innerhalb von app.yml installieren und Systembefehle innerhalb von Rails ausführen, um Dinge zu prüfen und auszuführen. Könntest du einen Dispatcher in eine reguläre Job umhüllen?
Das ist wirklich umständlich. Idealerweise läuft alles im Plugin ab.
Vielen Dank für deine Antwort.
![]()
Das Muster scheint mir das richtige zu sein, da die Templates wie Docker Compose funktionieren.
Ich verwende dies, um im Discourse Frotz-Plugin einen simplen Frotz zu klonen und einzurichten. Es ist absolut zuverlässig.
Für einige langlaufende Aufgaben in einem Plugin, das ich geschrieben habe, habe ich die Jobs-Schnittstelle verwendet, um einige Ansible-Aufgaben auszulösen, die mehrere Stunden in Anspruch nehmen können.
Wenn es jedoch „in der Nähe" liegt, scheint eine Vorlage in der app.yml angemessen; wenn es „von Discourse gestartet" wird, macht ein Job Sinn.
Nein, das ist nicht möglich. Innerhalb des Containers läuft der gesamte Plugin-Code als Benutzer discourse. Dieser Benutzer verfügt (wiederum innerhalb des Containers) nicht über ausreichende Berechtigungen, um runit-Dienste zu steuern.
Führen Sie den Prozess in einem anderen Docker-Container auf derselben Hardware aus. Dieser sollte an einem lokalen TCP-Port lauschen. Exportieren Sie die URL zum Verbinden mit dem anderen Dienst im Block env: in der Datei app.yaml, z. B.:
env:
CUSTOM_SERVICE_URL: 'localhost:5309'
Lassen Sie das Plugin die Verbindungszeichenfolge über ENV["CUSTOM_SERVICE_URL"] abrufen.