Discourse 开发理解问题

大家好。

我在本地计算机上安装了一个 Discourse,地址为:

http://localhost:4200/

安装依据是这份指南。我在此处开发 Discourse、主题和插件。

我还在虚拟机上使用 Docker 安装了一个 Discourse,依据是这份指南。这两处安装都能完美运行。

我不太理解 Docker 是什么,也不明白为什么虚拟机上的文件与本地计算机上的文件不同。

如果在虚拟机上执行命令 d/shutdown_dev 停止 Docker,会发生什么?

如何使用 Git 同步这两处安装?

我能否在本地机器上安装 Docker?这样做有什么用途?

请帮我解答这些疑问。

让我试着说明一下工作流程:

  1. 在代码库中工作(位于 /discourse 目录内)。
  2. 将代码库编译为 Docker 容器。
  3. 将该 Docker 容器部署到生产服务器。

在本地运行 Docker 的一个用例是:在将新编译的 Docker 容器部署到生产服务器之前对其进行测试。

1 个赞

Docker 是否存在,对于绝大多数插件和主题组件的开发来说,其实并不重要。这是一个独立的问题。我在开发环境中并不运行 Docker 实例。

在开发 Discourse 的附加组件时,你通常不必过度纠结于开发实例与生产环境在确切版本或配置上的差异,因为如果你的插件是开源的,你通常根本无法控制它最终会部署在哪些实例上。最重要的是遵循最佳实践,使你的附加组件更能适应 Discourse 核心代码的变更。即使你只是为自己的 Discourse 实例开发,你同样无法控制 Discourse 核心的变更,因此同样的方法依然适用。

版本上的细微差异通常不应导致你的插件或主题组件失效。虽然偶尔可能发生,但这并不具有规律性。我的插件和主题组件(TC)有时可以数月无需任何修改,即便它们所依赖的核心提交相隔数月。

我通常在进行插件修改(修复或增强)时,将开发实例更新至最新的 master 分支,以便及时应对任何破坏性变更。这只需执行 git pull、bundle install 和 db:migrate 即可轻松完成。

生产实例应仅通过前端界面或命令行重建的方式进行更新。

我的建议是:尽快将插件公开发布,吸引用户,并在实践中积累经验,了解可能遇到的各种挑战。不要过度拖延,立刻行动!同时也不必担心犯错,因为错误正是帮助你学习的宝贵机会。

6 个赞

非常感谢您的回答。
我将尝试进行开发。
也就是说,我可以从 app.yaml 文件中删除 “git clone /github…docker” 吗?
然后重新构建?

这类问题建议到 Docker 开发主题 中提问。目前,除非有非常充分的理由,否则不建议修改用于维护 Docker 开发环境的开箱即用脚本,这些脚本的存在想必是为了帮助你。

1 个赞

我明白了,谢谢。

1 个赞