(顺便说一句,@Heliosurge,我觉得这个问题之前有人提过):
如果你不想安装
discourse_themegem,还有更简单的办法:主题可以作为 zip 文件上传,而且你可以在管理界面中直接完成很多工作。
(顺便说一句,@Heliosurge,我觉得这个问题之前有人提过):
如果你不想安装
discourse_themegem,还有更简单的办法:主题可以作为 zip 文件上传,而且你可以在管理界面中直接完成很多工作。
很明显,这个话题现在已经完全跑偏了,就像任何与主流相悖的帖子一样总会发生这种情况。我甚至不打算讨论使用主题组件的问题,但还是要感谢大家。
它是怎么偏离轨道的?你提出了一个问题,大家表达了各自的观点。在我看来,这完全切题啊?
你现在已经掌握了所有必要的信息,可以实施你想要的任何配置方案了吧?
事情是如何偏离正轨的?
我部分同意楼主(OP)的观点,即「意见」开始滑向「嘲笑楼主想要的东西」。
我认为此事无需再进一步争论。因此,除非有人有其他解决方案可以贡献给这个话题,否则我认为我们可以在此结束讨论。
我确实同意有些帖子显得过于咄咄逼人。
我提到 TC(主题组件)是因为你在首页添加了一个按钮。这一点已经有几个组件做过示范。如果不是安全问题,TC 是更好的选择。
不过,我自己也很想知道你在主题(Themes)和主题组件方面有哪些顾虑?插件更多是用于安全相关事项,以及那些在 TC 中无法实现的功能——比如修改核心函数的行为。如果你更倾向于私下交流,我们可以友好地通过私信讨论。
TC 的另一个好处是,你可以在网站 Web 界面中随时编辑代码。
我认为插件路线的问题是,即使是合并到核心中的官方插件,仍然使用 Git 来更新插件和 Discourse 本身。
还有办法实现吗?
你可以在 app.yml 中使用卷支持功能,将主机上的文件夹挂载到容器的插件文件夹。
你可以用任何你喜欢的方式,将源代码从存放位置复制到 discourse/plugins 目录中。如果你不喜欢用 git clone,也可以用 rsync 或 cp -a。只需以任意方式将你的插件复制到虚拟机上,然后再执行一条命令,以类似 git clone 的方式复制它即可。
你可以使用任何你喜欢的方式,将源代码从你存放的地方复制到 discourse/plugins 目录中。
这确实是正确的回答。它尊重了问题的原始参数。从展示一个积极和支持性的社区的角度来看,这个帖子并不是很好。
@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,否则我不建议这样做。