Можно ли добавить службу runit в плагин?

Привет! Подскажите, пожалуйста, возможно ли добавить службу runit в плагин? Если это невозможно, буду рад узнать о ваших стратегиях решения подобных задач: у меня есть долгоживущая программа на C++, которая должна работать рядом с Discourse. Она должна автоматически перезапускаться и вести себя как демон. Спасибо!

Вы можете устанавливать зависимости в файле app.yml и выполнять системные команды в рамках Rails для проверки и запуска различных задач. Можно ли обернуть диспетчер в обычную задачу?

Это действительно неудобно. В идеале всё должно происходить внутри плагина.
Спасибо за ваш ответ. :slight_smile: :+1:

Мне кажется, этот паттерн правильный, так как шаблоны похожи на docker-compose.

Я использую это для клонирования и создания простого frotz в плагине Discourse Frotz. Всё работает как часы.

Для некоторых длительных задач в созданном мною плагине я использовал интерфейс заданий для запуска некоторых задач Ansible, которые могут выполняться несколько часов.

Однако, если речь идет о том, что задача выполняется «рядом», то для этого, похоже, подойдет шаблон в app.yml; если же задача «запускается Discourse», то логичнее использовать задание.

Нет, невозможно. Внутри контейнера весь код плагинов выполняется от имени пользователя discourse. У этого пользователя нет достаточных прав (опять же внутри контейнера) для управления службами runit.

Запустите процесс в другом контейнере Docker на том же оборудовании. Он должен прослушивать локальный TCP-порт. Экспортируйте URL для подключения к другой службе в блоке env: в файле app.yaml, например:

env:
    CUSTOM_SERVICE_URL: 'localhost:5309'

Пусть плагин получает строку подключения через ENV["CUSTOM_SERVICE_URL"].