如何在不重新编译 Discourse(即不升级到最新版本)的情况下重新编译插件?我遇到了一个问题:Discourse 的更新非常频繁,而且这些更新经常导致插件无法正常工作。我希望能够在不更新 Discourse 的情况下重新编译插件。这是否可行?
亲爱的 @Ed_Bobkov,
如果您确实认为必须如此,可以通过“不受支持的方式”实现您想要的“核心功能”,即:(1) 使用您自己的基础 Discourse Docker 镜像,以及 (2) 使用分叉后的 Discourse GitHub 代码库来构建 Discourse,方法是运行 Discourse 源代码的分叉版本。
在这种情况下,您需要执行以下操作:
- 编辑 Dockerfile,并添加您分叉的 Discourse 源代码仓库
- 编辑启动脚本,并添加一个 替代的基础 Docker 镜像
请参阅 Discourse Dockerfile 中的这一行:
git clone https://github.com/discourse/discourse.git &&\
以及启动脚本中的这一行:
image="discourse/base:2.0.20200512-1735"
如果您运行的是私有 Docker 注册表,可以将您选择的 Discourse 基础镜像推送到您的私有注册表中,例如:
image="localhost:5000/base:2.0.20200512-1735"
同样,如果您分叉了 Discourse,可以在上述 Dockerfile 中使用该分叉版本,例如:
git clone https://github.com/your_git_account/discourse.git &&\
这将帮助您管理基础 Docker 镜像和构建代码。
当然,我们不推荐这样做,因为您将无法受益于 Discourse 提供的所有错误修复、安全(和功能)更新;而且这种方法既不受支持,也不被推荐。
希望这对您有所帮助,@Ed_Bobkov
注意:采用此方法时,您仍然需要重新构建 Discourse;但您可以控制 (1) 基础 Docker 镜像的版本和 (2) Discourse GitHub 仓库的代码。由于此方法完全不受支持(据我所知),您需“自行承担风险”。
另请参阅:
非常感谢您如此详细的回答!这可不是一个简单的解决办法。奇怪的是,竟然没有一条命令可以在不检查 Discourse 更新的情况下重新编译。
你好 @Ed_Bobkov
嗯,也许确实存在一些我不了解的“其他方法”:slight_smile:这方面我听从其他人的意见。
我之前花了好几天时间研究这个问题,经过多次“试错”后,这是我所能想到的“最佳方案”。
如果有更简单的方法,我非常乐意了解;不过,如果你经常使用 Docker,这样做确实合情合理。
首先,必须构建镜像。Discourse 基于一个基础镜像进行构建并对其进行修改。当你在生产环境(Docker)中添加新插件时,通常需要重新构建容器。因此,我才会像上面那样回复。
这里有很多人在 Discourse 系统管理方面的专业知识远超于我,所以也许其他人能提出更符合你需求的更好建议。
祝好!
