vBulletin import_script 在导入子类别时出现错误

各位好,

首先,要向 Discourse 致以大大的感谢Discourse 是一件艺术品,令人印象深刻。在使用 vBulletin 十多年后,我们一直找不到合适的论坛软件进行迁移(之前的都“老一套”,乏善可陈),直到遇见了Discourse非常感谢

目前,我正处于测试阶段,正在将数据从 vB 3.8.X 导入到 Docker 容器 中的最新版本的 Discourse。这两项对我来说都是首次尝试。事实上,就在本周之前,我从未想过自己会写哪怕一行 Ruby 代码,但 Discourse 实在太出色,值得我去学习。

导入脚本 vbulletin.rb 已经运行了一两天,大部分情况下运行正常。事实上,它的表现令人惊叹。偶尔会出现错误,但重启脚本后错误就消失了。

不过,我发现了一个导入子分类时的 bug(重启后依然存在),具体如下:


Traceback (most recent call last):

5: from script/import_scripts/vbulletin.rb:942:in `<main>'

4: from /var/www/discourse/script/import_scripts/base.rb:47:in `perform'

3: from script/import_scripts/vbulletin.rb:84:in `execute'

2: from script/import_scripts/vbulletin.rb:287:in `import_categories'

1: from script/import_scripts/vbulletin.rb:287:in `each'

script/import_scripts/vbulletin.rb:289:in `block in import_categories': undefined method `[]' for nil:NilClass (NoMethodError)

root@localhost-app:/var/www/discourse# su discourse -c 'bundle exec ruby script/import_scripts/vbulletin.rb'

我原本打算用个笨办法来解决:重新导出 vB 数据库,把所有论坛改为论坛,然后重新进行整个迁移。但后来我想,也许我应该更“社交”一点,把这个作为 bug 报告发出来。

除了我这个新手提出的笨办法外,大家有什么更好的修复建议吗?

如果没有,我打算再次导出数据,手动在数据库中调整,然后重新迁移。我知道这肯定是个新手的笨办法。

谢谢!

或许可以考虑先升级到至少 vB 4 版本……导入器主要针对 4.x 版本设计。

您的分类嵌套有多深?如果只有一到两层,只需注释掉第 287 至 291 行中的扁平化代码即可。

3 个赞

不。我绝不会那样做(升级到 vB4)。

我昨天已经注释掉了有问题的几行代码。

我的问题基本上是如何针对 vB 3.8 修复此问题,否则我就自己修复了。我在这篇帖子中报告了一个关于代码的“缺陷”,如果得不到关于“代码缺陷修复”的回复,我就自己编写修复代码。

这就是我把这个缺陷发布在这里的原因:)。这是一个关于代码的“缺陷”报告。代码存在“缺陷”,所以我进行了报告……

嗯。我原本是想表现得“友善”一些,在这里发布这个缺陷,并希望从领导层(代码方面)获得一些适用于我这种情况(而非 vB4 情况)的建议;再次抱歉,但无论如何我都不会升级到 vB4。很抱歉如此直接,也抱歉没有遵循那个想法。我会根据需要修改迁移脚本,并按要求修改我们的数据库。到目前为止,我已经为自定义代码标签等添加了代码。

祝好。

作为 vBulletin 导入器的贡献者之一,VB 5 导入器的作者,并且完成了超过 50 次从 vBulletin 到 Discourse 的迁移,我只是想说明:该导入器主要在 vBulletin 4 上进行了测试,而非 3.8 版本,后者已停止支持超过 7.5 年。我并非试图“炫耀”……

无论如何,我想知道这究竟是导入器中的错误、与 vBulletin 3.x 相关的问题,还是数据库损坏所致。我怀疑后两种情况的可能性更大。你可以修改代码,在检测函数未返回结果时选择一个默认分类,但(至少在 vBulletin 4 上)这将意味着存在一个没有正确父级的孤立分类,即数据库已损坏。

3 个赞

我们的数据库没有任何损坏,这可能是也可能不是 vB3.8.X 的问题。但当然,这与 vB3.8.X 有关,因为这是对 vB3.8.X 的升级,哈哈。

另一方面,我在互联网上的其他论坛读过很多帖子,许多人在迁移到 Discourse 时遇到了问题,即使是从 vB4 迁移(这是正常的)。所以,当然,我不是地球上唯一一个报告迁移 bug 的人。没人喜欢迁移。这对每个人来说都很枯燥。但我对此没问题,因为我喜欢 Discourse。编写它的人真是艺术家!他们令人印象深刻。

正如我所说的,“笨拙的方法”肯定能奏效:只需再次导出我们的数据库,手动将所有希望保留的子论坛更改为父论坛,然后再次执行迁移。我不希望重要的子论坛有一个“默认”主题,而且我们所有的主要论坛都是子论坛,而不是父论坛。

@michaelp,如果你没有经验或兴趣确保此脚本与旧版 vB3.8.X 兼容,这完全可以理解。但另一方面,我也拥有数十年的编码、移植、迁移、构建和修复 bug 的经验,并且我在此处的 Meta Discourse 上发布了与此代码相关的 bug 报告。我热爱 vB3.8,至今仍认为它比 vB4 和 vB5 更优秀。这就是为什么我从未升级到 vB5 或 vB5。我们不喜欢 vB4/5。:slight_smile:

如果这要演变成一场“嗯,既不是 vB4 也不是 vB5”的讨论,那我最好不再在此发布任何迁移 bug,而是在迁移完成后变得更加活跃。

祝好。

我将在此处持续记录进度,暂时退出此讨论,直接 完成它

不,不是这样的。我只是想帮你,并找出对你来说最省力的迁移路径。如果我的诚实回答冒犯了你,我很抱歉。看来我触到了你的痛处,但这并非我的本意。

祝迁移顺利!等你完成后,或许可以提交一个包含你改进内容的拉取请求。

1 个赞

@michaeld 完全不用担心。

非常感谢你编写了 vbulletin.rb 迁移脚本。

我确实明白你是想提供帮助,是的,你关于“迁移到 vB4”的建议确实让我有些不舒服;但请别放在心上。有时候我确实容易“被惹恼”,尤其是在报告一个 bug 后,得到的回复却(就我当时的情况而言)没有帮助。

事实上,如果这次移植能成功(目前仍在移植中),我将欠你(以及所有共同作者)一份巨大的感激之情,感谢你们提供了核心的 vbulletin.rb 脚本!

Discourse 真的非常棒!!

再次感谢你的迁移脚本。如果没有它,我们肯定不会踏上这个耗时的过程!

再次感谢!

附言:正如我所提到的,我对于这个“修复”的计划只是简单地导出数据库,将重要的子论坛改为父论坛,然后“再来一次,山姆”…… :slight_smile:

为明确起见:我并未编写整个 vbulletin.rb,只是对其进行了贡献。但我确实编写了专门针对 vbulletin5 的版本。

1 个赞

无论如何,非常感谢

这两项贡献都很扎实,是论坛社区的礼物。

我会将任何 vB3.8.X 迁移更新发布到“那边”,我在那里持续记录事件的发展。

祝好

1 个赞


我目前唯一的“警示性”评论是,在我至今与“Discourse 这边”的两个人交流中,他们两人都“伸出手来”,企图从这次迁移中牟利。其中一人是受雇的“迁移专家”,想收钱帮我;另一人则出现在 Discourse 论坛中,还有一位是 Discourse 服务器提供商。

这让我感到非常难过。我本想毫无商业目的地帮助大家。

5 个赞

这确实不太公平 @neounix

@michaeld 在 Discourse 社区非常活跃,并以开源精神回馈了大量资源。这一点尤其宝贵,因为他们(Communiteq(原 DiscourseHosting))以非常合理的价格托管了大量 Discourse 站点,并且在 Discourse 实际托管方面拥有丰富的经验。:revolving_hearts:

5 个赞

嗨,Jeff,

最近,我构建了一些 Node-RED 解决方案,并加入了 Node-RED 论坛(这是一个基于 Discourse 的网站)。

在那个论坛里,大家争先恐后地互相帮助。从新手到专家,所有人都热情地帮助他人。事实上,有时这看起来有点“睾酮驱动”,许多经验丰富的成员在竞争成为“最佳帮助者”和“第一个回答者”。这很有趣。我在过去十年中曾在包括我们自己在内的多个在线社区见过这种现象(但这又是另一天的故事)。

作为一个在这个领域深耕已久的人,我相信你也会同意,每个在线社区都有其优点和缺点。当新人加入社区时,他们提供了宝贵的视角,因为他们不属于既定的社会等级。我想所有有在线社区经验的人都会同意这一点。

当然,我非常感谢 @michaeld 的贡献,vbulletin.rb 脚本为我们从 vB3 迁移到你创造的“艺术品”Discourse 提供了一个非常有用且备受感激的起点。Discourse 确实非常棒。我多年来一直在等待这样一个伟大的产品,所以我们曾无奈地停留在 vB3,而我并非足够优秀的程序员,无法自己构建像 Discourse 这样的系统。

因此,我承认(并接受任何惩罚):在我提交迁移测试中的错误报告时感到被冷落,甚至当我的错误报告从“错误”类别被移至“支持”类别时更加感到被冷落,这似乎是因为显然 vbulletin.rb 脚本中存在错误。建议将原本运行良好的 vB3 论坛迁移到糟糕的 vB4 论坛以使该脚本更好地运行,这完全不可行(说实话,这让我很反感);而且到目前为止,没有人认真对待我的任何错误报告,也没有表现出修复它们的兴趣;所以我认为,不提交与 vB3 迁移相关的错误报告是个好主意,对吧?

所以,这没什么问题。例如,当前的 vbulletin.rb 迁移脚本(在附件迁移中)要求一个名为 filedata 的表,而该表在 vB3 中并不存在。这没问题。我会创建一个变通方案。在将 forums 迁移到 categories 的过程中也存在错误。我已经为此创建了一个变通方案。也许我的变通方案并不 完美,但这没关系。我仍在测试中。

让我们不要把这件事变成关于 个性 的讨论。我正在处理迁移工作。这是一项繁重且进展缓慢的工作;就像看着油漆变干一样;但另一方面,看到 Discourse 逐渐成形又令人兴奋。我真心对这个社区心存感激,一旦度过这个“不太有趣的阶段”进入“有趣的阶段”,我一定会回馈社区。

我非常感激 Discourse——它是一件 艺术品,也是一个非常优秀的开源产品。它非常出色。谢谢。迁移脚本虽然对 vB3 来说有点 bug,但仍然是可行的;我非常感激它为迁移提供的起点。

很抱歉你觉得我的评论 不公平。这是我的错,因为我刚从 Node-RED 论坛的几周密集访问中走出来;那里的社区对帮助他人有着极好的态度,这让我对几位 Discourse 参与者的初步体验感到失望,而他们都有商业利益。到目前为止,这就是我的印象。很抱歉“这边”的第一印象与“那边”相比有所不同。正是 Node-RED 及其对 Discourse 的使用,说服我们将网站迁移到 Discourse

虽然你可能觉得我的第一印象 不公平,但我没有点名,并保持我的印象匿名,我认为这在当时是 公平 的。此外,考虑到我的 错误报告 基本上被 meta 忽略和轻视(毕竟,这只是 vB3,哈哈),在你看来什么是 公平 的?你希望我删除关于商业利益的“警示性”评论吗?

我正在处理迁移工作;尽管脚本中有 bug,但仍在推进,因为 bug 只是 bug,需要解决然后继续前进。

如果在这次 临时测试迁移 中,刚从充满活力的 Node-RED 体验中走出来,我没有像对 NR Discourse 社区 那样印象深刻,我对此表示歉意;但正如 @michaeld 回复我时所说,他并不在乎我是否“印象深刻”或“不印象深刻”;这没问题。每个人都有权持有自己的观点。我假设这也包括我的初步观点/印象,对吧?

我对 Discourse 非常赞赏,尽管有 bug,vbulletin.rb 脚本仍然 足够好用 以开始工作,并足以带来乐趣,这才是最重要的,对吧?

我们应该享受乐趣!

如果你们能更认真地对待我在 vbulletin.rb 脚本中提交的错误报告,我会对 meta 更加满意;但话说回来,我理解。我们还在 vb3 上,信息是“你自己搞定吧,伙计”,这完全可以理解。我理解。

没人觉得 vB3 有趣了。哈哈,尤其是 ,在经历了十多年的使用之后。我非常高兴并感激 Discourse,让我们终于能够从那个 过时、已过时且陈旧的论坛 迁移到这个 现代在线艺术品——Discourse

如果你希望我删除我的 一点警示性评论,请告诉我,我会照做,如果你真的认为在回复之后它仍然 不公平。我觉得它是 公平 的,但也欢迎外部视角。外部视角很好,通常非常有用(我希望这是双向的)。

祝好。

相信我,我完全支持将社区从过时的软件迁移出去。这是 Discourse 的主要目标之一。

如果你的迁移结果积极,并且能提供证据表明一切运行正常,Discourse 有可能通过财政资助来支持你的 VB3 → Discourse 迁移脚本开发工作 :hugs:

你好,Jeff,

谢谢你的好意,但我真的没问题,不需要任何经济支持。

正如人们常说的,我“一生无忧”;确实不需要更多的财务资源。我很幸运,正如大家所说,真正蒙福;我从不把人生看作是一场“越来越富有”的游戏。

根据粗略计算,我们的网站从诞生、发展到巅峰,再到如今的“年事已高”,多年来通过搜索结果触达了超过5亿名未注册的唯一用户,甚至可能更多。我并没有那么紧密地追踪这些数据。

这种“善业”对我来说已经足够。知道在漫长的IT职业生涯中,我们帮助了这么多需要帮助的人,这对我来说意义非凡(我想对你也是如此)。这关乎的不是金钱,而是在技术论坛中帮助他人所积累的“善业”。因此,当我们将其升级到 Discourse 时,对所有人来说肯定会更好。我绝对无法编写出像 Discourse 这样堪称 艺术品 的代码。我的职业是 跨领域多面手网络安全专家系统工程师,如今我已基本从公共和专业生活中退休,对此我感到非常幸福。

第一次 测试迁移 的效果远超预期。我发现了一些 bug,还有一些仅适用于我们网站的独特问题,比如自定义的 BBCODE 标签。我完全可以应对,这不成问题;接下来我需要为我们的社区进行定制,因此会有一些有趣的工作要做。我期待着手完成这些,并顺利越过 迁移 101 阶段。

关于 vb3,确实有很多遗留的 vb3 社区,很高兴你有意帮助他们。我同意 vbulletin.rb 目前还不够先进,无法为那些 技术能力较弱 的用户管理迁移;因为我认为核心的 vbulletin.rb 已经“足够好”,而且我可以轻松修改它(我也一直在根据出现的错误进行修改)。

我要回去继续处理这项工作;我需要在 vbulletin.rb 中再做些调整,以应对我一边进行一边详细记录在我们网站上的那些错误。我必须完成这项工作,而如果我现在直接 动手去做,进度会更快。

再次感谢你的善意提议。关于此事的所有笔记,每一步的进展,无论是好的、不完美的还是出色的,都会发布在我之前贴出的这个链接中:

等这个阶段 彻底完成,让我们的用户进行测试并收集他们的反馈后,我很乐意重新回到 Meta 板块。我相信大多数用户都希望我们迁移到 Discourse,彻底摆脱我们遗留的……混乱局面。

再次感谢 Discourse。对于你们慷慨地将开源项目献给世界,我赞美之词难以尽述。

说实话,我不想占用你宝贵的时间,我也明白 vb3 对任何人来说都不再有趣,尤其是对 我本人 而言。我希望能尽快卸下这沉重的 vb3 船锚。我想,我可以应对,没问题。

再次向你和 Discourse 团队致敬,感谢你们带来 Discourse,也感谢你和你的团队提供了基础的 vbulletin.rb 迁移脚本。那些 bug 真的 完全不是问题。如果太容易,反而就没那么有趣了!

事实上,迁移已经运行良好,但我需要为我们的自定义 BBCODE 编写更多自定义代码,修复一些零星的 bug,然后再次运行整个流程!

再次感谢!

1 个赞

话又说回来,

@codinghorror

如果你希望团队中的某位成员与我合作,修复一些较大的问题,例如由于 vb3 中缺少表而导致的 filedata 错误,我很乐意提供帮助。为了其他 vb3 社区的利益,并让 vbulletin.rb 更好地支持 vb3,我愿意放慢进度。

请告诉我。经过再次考虑,我确实愿意放慢节奏并提供帮助。我绝不想显得自私或不配合团队工作。

说实话,我并不是一个出色的 coding collaborator,但如果这能帮助到其他使用遗留 vb3 的用户,我很乐意尝试。

1 个赞

等等。首先,我并没有那样说。我说的是我并没有试图“取悦”你,这是对你所说的“我对你的回答不以为然”的回应,而这句话后来被你从帖子中删除了。再说一次:这让我感到难过。

无论你是否印象深刻,也无论你是否觉得受到了冷遇,你却在背地里说我“伸出双手,企图从这次迁移中牟利”,这完全不是事实。然而,你说了很多话,却从未正面回应这一指控纯属不实。事实上,你还重复了这一说法。而“很遗憾你这样想”并不等于道歉。

我仍然认为这不是一个 bug,并且我认为你的论坛在数据库中的存储方式存在问题——要么是完全“错误”的,要么是在 vB3 中尚可接受但在 vB4 中已不再适用的方式。

我从未要求你运行 vB4,我只是建议你先将数据库迁移到 vB4,然后再通过导入器进行处理。这才是真正的“Unix 风格”——将多个步骤管道化以达到预期结果——依我之见,这是最短且成本最低的迁移路径。

1 个赞

这是正确的建议。你是否有某种原因无法升级到 VB4?因为那可能比为 VB3 编写全新的迁移程序更容易。

1 个赞

Micheald,

请你行行好,就此打住吧。

我的阅读理解能力不比别人差,而你当时说的是:

或许可以考虑先升级到 vB 4……导入器主要针对 4.x 版本。

这与你所说的:

我建议你先将数据库迁移到它,然后再通过导入器运行它。

截然不同。

@Micheald,请就此打住。

请停止这些无谓的争执。求你了。

这完全是在浪费时间,毫无成效。

如果我的建议被您误解,我深感抱歉;更让我难过的是,您认为这是一条“毫无建设性”的评论,而它本是一条出于好意的建议。

我绝不会建议任何人运行基于 vB4 的论坛。

我现在将取消订阅此话题,因为我觉得您对待我的方式并不公平。

3 个赞

我不同意。事实上,根据我们遗留的 vB 成员控制面板,我们根本无法升级到 vB4

显然,既然我们的网站是长期 vB 用户,我们应该对 vB 这边的工作原理有所了解。

我已经提到过,升级到 vB4 对我们来说是完全不可行的。

这毫无进展(就像一场自相残杀的闹剧,LOL),先是说“迁移到 vB4