プラグインにrunitサービスを追加できますか?

こんにちは、プラグイン内で runit サービスを追加することは可能でしょうか?もし不可能であれば、このような問題に対処するための皆さんの戦略について教えていただければ幸いです。Discourse と並行して動作する長期実行の C++ プログラムがあり、自動再起動が必要で、基本的にデーモンとして振る舞ってほしいと考えています。ありがとうございます。

app.yml 内でパッケージをインストールしたり、Rails 内でシステムコマンドを実行して処理を確認・実行したりできます。ディスパッチャーを通常のジョブでラップするのはどうでしょうか?

これは本当に手間がかかります。理想を言えば、すべてはプラグイン内で完結してほしいものです。
ご回答ありがとうございます。:slight_smile: :+1:

このパターンは、テンプレートが Docker Compose のように見えるため、私には正しいものに見えます。

私はこれを、Discourse Frotz プラグイン内でクローンして単純な frotz(フロットス)を作成するために使用しています。非常に安定しています。

私が作成したプラグイン内で、長時間実行されるジョブの一部には、ジョブインターフェースを使用してAnsibleタスクを起動しました。これには数時間かかる場合があります。

ただし、「アプリの隣」にある場合はapp.yml内のテンプレートが適切でしょう。「Discourseによって開始される」場合は、ジョブが理にかなっています。

不可能です。コンテナ内では、すべてのプラグインコードが discourse ユーザーとして実行されます。そのユーザーは(コンテナ内において)runit サービスを制御するのに十分な権限を持っていません。

同じハードウェア上の別の Docker コンテナでプロセスを実行してください。そのプロセスはローカルの TCP ポートでリッスンしているはずです。接続先の他のサービスへの URL を app.yamlenv: ブロックにエクスポートします。例:

env:
    CUSTOM_SERVICE_URL: 'localhost:5309'

プラグイン側では、ENV["CUSTOM_SERVICE_URL"] を介して接続文字列を取得します。