neounix
(Dark Matter)
1
我很高兴分享这个 Discourse 管理员插件,它会将容器名称(在主应用的 yml 文件中指定)添加到管理员页面的备份选项卡中。这个实用插件对于那些运行多容器配置并希望一眼看出哪个容器正在运行的 Discourse 系统管理员非常有用。
截图
这是一个简单的插件,也是我的第一个“公开”插件,因此非常欢迎评论和 PR 来帮助改进它。容器信息来自 yml 文件中的环境变量,例如:
- DISCOURSE_CONTAINER_MAIN
- DISCOURSE_CONTAINER_DATA
我们同时运行多个容器,以便能够重建 Discourse 容器并无缝切换(通过更改反向代理配置),实现零停机时间。因此,对我们来说,将这些值硬编码到 yml 文件中比从 docker ps 获取更好,因为 docker ps 无法知道哪个容器是通过反向代理配置启用的。
待办事项
与 Discourse 专家相比,我的 Ember 技能还比较薄弱(仍在学习 Ember),因此在两个方面遇到了一些问题,因此至少有两个待办事项。如果任何人有兴趣,欢迎提交 PR:
-
当 Discourse 应用(GUI)正在运行并且我们切换容器(通过反向代理配置更改)时,必须重新加载页面(或禁用并重新启用插件)。我无法让计算属性自动更新(我尝试了许多不同的技术)。
-
无法让 I18N 按预期工作,因此 <span> 元素被硬编码在 JS 代码中,而不是位于区域设置配置中(但已预留了占位符)。
如前所述,欢迎提交 PR,因为我仍然是 Discourse 插件的新手!
评论和更新也欢迎在此处发布:
欢迎提交 PR!
8 个赞
不知道如何在通过反向代理切换容器时,让 Ember 的计算属性具有响应性。这确实是个有趣的话题,祝你好运。
我刚刚尝试了一下,通过更改反向代理配置切换容器,然后禁用再启用插件,就成功更新了。
无论如何……感谢你这个实用的插件 @neounix。
期待未来的改进。
2 个赞
neounix
(Dark Matter)
4
谢谢。但实际上,这个工具可能对不到 1% 的 Discourse 系统管理员有用,因为大多数 Discourse 实例(根据 meta 帖子的粗略估计)都运行单个容器且不使用反向代理(这是 Discourse 支持的标准配置)。
是的,我尝试了很多种方法。基于我在 Discourse 插件方面的“极度新手”水平,我的问题在于我只能从 yml 文件中用 Ruby 读取 GlobalSetting 环境变量,而插件的其余部分是用 JavaScript 编写的。
我也考虑过将插件完全重写为 Ruby,但尚未朝这个方向推进,因为我希望有人能提出更好的想法,甚至提交 PR,实现在反向代理切换场景下容器信息的响应式更新,从而无需重启应用(即无需重新初始化插件)。
感谢你的评论。
2 个赞