如何修改 app/views/layouts/?

一个简单的问题:

我肯定少了一些脑细胞!

我们在 /var/www/discourse/app/views/layouts 目录下的某个文件中对应用容器做了一些修改。

然后,我们(像傻瓜一样)以为只需通过 /var/discourse/launcher rebuild app 重建容器即可(其实不行),但每次这样做,我们的修改都会被覆盖。

我们不想 fork Discourse,但我们希望使用 launcher 重建应用时,不会覆盖我们的本地修改。

请问有人能告诉我们该怎么做吗?

谢谢!

看来我们找到了问题所在:在重建过程中,无论我们尝试什么方法,应用中的文件都会被覆盖:

原因似乎是 launcher 拉取了基础的 Discourse 镜像,而该镜像中包含一个 .git 目录,其 git 配置文件自然指向 Discourse 的主仓库,从而覆盖了我们所做的更改:

launcher

pull_image() {
  # 添加一次重试以解决 dockerhub TLS 错误
  $docker_path pull $image || $docker_path pull $image
}

之前我们误以为 launcher 是构建镜像(我们怎么会忽略这一点?!),现在很清楚,它实际上是从 Docker Hub 拉取基础镜像。

一切从头再来!

是否有某个标志可以设置,让 launcher 不再拉取基础镜像,而是改为构建它?

你好 @DBHacker

听起来你可能想这样做:

  1. 对基础容器进行修改(正如你提到的)
  2. 为该镜像打标签并保存
  3. 将该镜像推送到你自己的 Docker 镜像仓库
  4. 编辑 launcher,使其从你的仓库中 docker pull 这个修改后的基础镜像

希望这能在某种程度上帮到你!

不过,Meta 平台(至少我认为)并不支持这种操作,所以你需要自行解决。

祝你黑客玩得开心! :slight_smile:

注意:我还没有尝试过这个方法……但听起来你玩得很开心! :slight_smile:

1 个赞

您需要在插件或主题组件中进行这些更改。

6 个赞

你好 @pfaffman

我完全同意你的观点,使用插件和主题组件是最佳方案!这种方法得到完全支持,并且有助于与 Meta 开发团队保持同步。

保持好奇心、探索各种可能性并深入理解 Discourse 也是非常有价值的。在昨天阅读了这个主题后,我创建了一个本地 Docker 仓库,在本地给 Discourse 基础镜像打了标签,将该镜像推送到我的新 Docker 仓库(localhost),然后通过从该本地仓库拉取基础 Discourse 镜像重新构建了 Discourse 应用。

我觉得实验和学习更多关于 Discourse 的知识非常有趣,而这次系统管理员的探索/实验让我受益匪浅。当然,这并不是我们运行生产应用的方式,但通过亲自走一遍从 localhost 而非远程拉取 Discourse 基础镜像的步骤,我学到了很多,而且整个过程出乎意料地简单。因此,我将这次实验整理成文,分享给其他好奇的系统管理员:

希望其他系统管理员探索者也能从这次实验中获益,哪怕只是一点点。

保持好奇

1 个赞

有一种非常简单的方法可以实现这一点,无需担心图片问题或编写插件。只要您只是修改现有的扁平文件,就可以通过 app.yml 对其进行修改。

搜索 hookspups。其他一些指南已经使用了这种方法。

5 个赞

感谢 @neounix

我也喜欢学习和尝试新事物。

等哪天有时间了,我会试着多了解一些 Docker 和本地镜像仓库的知识。

目前,我还是专注于插件开发,因为 Discourse 支持插件开发,并且符合 Discourse 的开发模式。

正如你所说,学习这些知识很有趣,但保持在主流范围内也很重要!

:slight_smile:

2 个赞

同意。

即使尝试了本地 Docker 注册表和本地 Discourse 基础镜像,我也无法获得一致的结果(不确定原因,我可能在配置中遗漏了某个关键细节)。

另一方面,我对本地 Docker 注册表以及如何构建和管理它有了更深入的了解。

只是一个旁支的 Docker 实验……确实学到了很多!

1 个赞

嗯,看起来唯一可行的方案是使用插件。

感谢大家的回复和帮助。

2 个赞

你正在做哪些类型的文件修改?

1 个赞