daemon
(Alex)
1
你好!
我想升级到最新版本,但遇到了一些主题组件的问题。
这些组件都是我自己开发的,并且我已经将它们从 GitHub 迁移到了 GitLab。现在,如果我想升级 Discourse(不是在 Discourse 内部操作),就会报错,因为它们已经不可用了。我尝试在 Discourse 内部删除它们,但无法成功删除。
我的问题是:在服务器上直接删除它们的文件路径在哪里?我找不到它们。
我尝试了安全模式,但无法在安全模式下访问论坛。
编辑:
是否存在一个类似 app.yml 的文件,其中存储了所有主题和组件的列表?这样我就可以删除列表,然后在不包含这些组件的情况下重新构建 Discourse。
michaeld
(Michael - Communiteq)
2
我认为这是你需要解决的问题。正确的做法是删除所有来自旧位置的主题和主题组件,并从它们的新位置导入新的主题和组件。
daemon
(Alex)
3
这不可行,因为那样会导致 Discourse 陷入无限循环。这就是我询问是否有其他方式删除它们的原因。
我甚至无法进入安全模式。
重新安装也不可行,因为备份太旧了。
在执行 ./launcher rebuild app 后,我发现论坛对访客不可用。
那么,我该如何让它重新正常工作呢?
michaeld
(Michael - Communiteq)
4
为什么会这样?具体出现了什么情况?
备份的旧旧程度不应该成为问题,即使是五年前的备份也能顺利恢复。
说实话,主题组件的问题恐怕是你面临的最小麻烦。
如果无法通过界面卸载它们,恐怕其他方法也会失败。
我认为在数据库中手动禁用组件,是此处可能作为最后手段的解决方案。虽然风险很高,但在没有其他选择的情况下是可行的。
禁用组件至少能让重建过程成功,从而允许访问管理界面,以便从 GitLab 移除并重新安装组件。
daemon
(Alex)
6
什么都没发生,网站在安全模式下不可用。
当然有影响,因为最后一次备份之后的所有帖子都丢失了。
不,论坛在我尝试更新之前运行正常,那时我还没移除组件。
@itsbhanusharma
谢谢你的回答。我之前不知道主题和组件是存储在数据库中的。
我该如何访问数据库?
编辑:
好的,我已经进入数据库,我想应该是 theme_settings 表。
如何删除所有组件?
michaeld
(Michael - Communiteq)
7
我看错了你的帖子,我以为你说的是因为恢复失败,所以内容太旧了。
它们并未存储在数据库中,但其激活/停用状态确实存储在数据库中。
我记不清具体步骤了,但我最近修复过一个类似的问题。
这里最关键的是确认您的容器是否仍在运行。如果容器正在运行,我或许可以就如何尝试从数据库中禁用有问题的组件提供建议。
daemon
(Alex)
9
是的,容器仍在运行。禁用这些组件对我会有很大帮助。
michaeld
(Michael - Communiteq)
10
它们确实完全存储在数据库中(以 theme* 开头的表)
michaeld
(Michael - Communiteq)
12
凭记忆——从 Rails 控制台运行此命令。在查看主题时,从 URL 中找到其 ID。
t = Theme.find(123)
t.enabled = false
t.save
daemon
(Alex)
13
好吧,这确实是个问题。
难道不能用类似 pgAdmin 的工具直接访问数据库吗?
我不知道主题和组件的 ID,因为我已经无法访问管理后台了。
编辑:
我已经找到了主题和组件。
禁用它们不起作用,那么如何在 rails c 中删除它们呢?
我甚至尝试用 rake 来移除它们,但 rake 也无法删除它们。
Osama
14
你能提供更多细节吗?是否出现了错误?如果有,具体是什么错误?还是说没有任何效果?
daemon
(Alex)
15
rake themes:uninstall https://github.com/link/to/git.git
rake aborted!
不知道如何构建任务 'themes:uninstall'(使用 `rake --tasks` 查看可用任务列表)
您是不是想输入:themes:install
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
(运行任务时添加 --trace 可查看完整堆栈跟踪)
那么,使用 rake 删除内容的正确命令是什么呢?
我通过 rake --tasks 和 rake -AT 获取了命令列表,但其中并没有删除主题或组件的命令。
虽然可以通过 rails c 禁用主题,但重新加载后,仍然会显示那个已损坏的旧主题。
Osama
16
Theme.where(user_selectable: true).update_all(user_selectable: false)
Theme.where(auto_update: true).update_all(auto_update: false)
Theme.clear_default!
你能在 Rails 控制台中尝试运行这些命令,然后看看能否加载你的网站吗?如果不行,能否尝试重新构建?
daemon
(Alex)
17
按照您的指令重建后,一切顺利,我的论坛已恢复在线!

非常感谢所有帮助过我的人!
pfaffman
(Jay Pfaffman)
18
嘿 @Osama,我最近一直担心“主题组件会导致重建失败”这个问题。
我觉得我们需要一篇 howto 来应对它。
我认为这里的修复方案只解决了“因 GitHub URL 失效而导致构建失败”的情况,对吧?
对于那些因 JavaScript 中存在错误而导致构建失败的情况,是否也有类似的方法可以在命令行中禁用或移除主题?我们应该把这类方法也写入 howto 吗?
编辑:就像包含“备用徽标”时导致失败的情况……
Osama
19
我也一直在思考这个问题,我认为这对某些社区来说是合理的,但并非适用于所有社区。有些社区将自定义内容或主题视为网站身份的核心部分,他们非常希望在网站部署时能立即得知自定义内容是否存在问题;而另一些社区则使用原生 Discourse 安装,仅在此基础上添加少量自定义内容或组件,即使这些内容几天无法使用,他们也能轻松应对。
或许在安装新主题或组件时,“在 Discourse 更新时自动更新”复选框默认应处于关闭状态?目前该选项默认是开启的,但我认为应该默认关闭,不过这需要更广泛的讨论……
不,上面的代码片段(尤其是第二行)禁用了所有已安装主题的自动更新功能,因此应该能修复因主题自动更新(包括 JavaScript/CSS 错误)导致的任何构建失败问题。howto 部分应仅包含第二行代码。
yanokwa
(Yaw Anokwa)
20
我也刚遇到这个问题。如果你有一个组件链接到公共仓库,然后将其设为私有,重建就会失败。这令人不快,因为用户所做的更改可能在数月后导致系统管理员无法正常运行站点。
Path of theme components - #16 by Osama 中提供的命令对我非常有效。我建议补充如何进入 Rails 控制台的说明:
./launcher start app
./launcher enter app
rails c