如何在不使用第三方主机的情况下安装插件?

(顺便说一句,@Heliosurge,我觉得这个问题之前有人提过):

很明显,这个话题现在已经完全跑偏了,就像任何与主流相悖的帖子一样总会发生这种情况。我甚至不打算讨论使用主题组件的问题,但还是要感谢大家。

它是怎么偏离轨道的?你提出了一个问题,大家表达了各自的观点。在我看来,这完全切题啊?

你现在已经掌握了所有必要的信息,可以实施你想要的任何配置方案了吧?

我部分同意楼主(OP)的观点,即「意见」开始滑向「嘲笑楼主想要的东西」。

我认为此事无需再进一步争论。因此,除非有人有其他解决方案可以贡献给这个话题,否则我认为我们可以在此结束讨论。

我确实同意有些帖子显得过于咄咄逼人。

我提到 TC(主题组件)是因为你在首页添加了一个按钮。这一点已经有几个组件做过示范。如果不是安全问题,TC 是更好的选择。

不过,我自己也很想知道你在主题(Themes)和主题组件方面有哪些顾虑?插件更多是用于安全相关事项,以及那些在 TC 中无法实现的功能——比如修改核心函数的行为。如果你更倾向于私下交流,我们可以友好地通过私信讨论。

TC 的另一个好处是,你可以在网站 Web 界面中随时编辑代码。

我认为插件路线的问题是,即使是合并到核心中的官方插件,仍然使用 Git 来更新插件和 Discourse 本身。

你可以在 app.yml 中使用卷支持功能,将主机上的文件夹挂载到容器的插件文件夹。

你可以用任何你喜欢的方式,将源代码从存放位置复制到 discourse/plugins 目录中。如果你不喜欢用 git clone,也可以用 rsynccp -a。只需以任意方式将你的插件复制到虚拟机上,然后再执行一条命令,以类似 git clone 的方式复制它即可。

这确实是正确的回答。它尊重了问题的原始参数。从展示一个积极和支持性的社区的角度来看,这个帖子并不是很好。

@Falco @pfaffman 谢谢,你们的回答解除了我的疑虑。

我把我的 app.yml 配置留在这里,以防对任何尝试从主机加载本地插件到 Discourse 的人有用。

## Docker 容器是无状态的;所有数据存储在 /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log
  - volume:
      host: /var/discourse/plugins
      guest: /var/plugins

## 插件放在这里
## 详见 https://meta.discourse.org/t/19157
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - cp -a /var/plugins/. $home/plugins/

在我的设置中,我将所有自定义插件保存在主机的 /var/discourse/plugins 中。

挂载的目录在容器内变为 /var/plugins,在 after_code 钩子期间,命令:

cp -a /var/plugins/. $home/plugins/

将所有挂载的插件复制到 Discourse 的原生插件目录($home/plugins,通常是 /var/www/discourse/plugins)。

这使得可以直接从主机管理插件,而无需使用基于 git 的插件安装或依赖第三方托管服务。

太好了,很高兴这对您有效!

您也可以使用符号链接指向插件,而不是复制它们。如果您这样做,对插件的更改(至少在某些不需要迁移或编译资产的情况下)可以通过重启容器来应用。

嗨,只是好奇你们如何处理迁移和数据库变更?

这与插件的安装方式无关。只要插件存在,迁移操作就会被处理。

除非遇到特殊情况,否则我会重建容器。但你可以运行

 rake db:migrate

并且预编译资产。除非你有特定需求并且熟悉 Rails,否则我不建议这样做。