我可以在插件中添加一个 runit 服务吗?

你好,我想知道是否可以在插件中添加一个 runit 服务?如果不可行,我很乐意了解您处理此类问题的策略:我有一个需要与 Discourse 一起运行的长时间运行的 C++ 程序。它应该自动重启,并且基本表现得像一个守护进程。谢谢。

您可以在 app.yml 中安装内容,并在 Rails 中运行系统命令以检查和执行相关操作。您是否可以将一个调度器封装为一个常规任务?

这真的很繁琐。理想情况下,所有操作都应在插件中完成。
感谢你的回答。:slight_smile: :+1:

在我看来,这个模式似乎是正确的,因为模板类似于 Docker Compose。

我使用它在 Discourse Frotz 插件中克隆并制作简单的 Frotz。它非常稳定。

对于我编写的插件中的一些长时间运行的任务,我使用了 jobs 接口来启动一些可能需要数小时才能完成的 Ansible 任务。

但如果它是“紧邻”应用的,那么在 app.yml 中使用模板似乎更合适;如果它是“由 Discourse 启动”的,那么使用 job 是合理的。

不可以。在容器内部,所有插件代码均以 discourse 用户身份运行。该用户(在容器内部)没有足够的权限来控制 runit 服务。

请在同一硬件上的另一个 Docker 容器中运行该进程。它应监听本地 TCP 端口。在 app.yamlenv: 块中导出用于连接其他服务的 URL,例如:

env:
    CUSTOM_SERVICE_URL: 'localhost:5309'

让插件通过 ENV["CUSTOM_SERVICE_URL"] 获取连接字符串。