在导入之前设置信任级别、徽章和其他 Discourse 设置是否安全?我猜想这个导入器只会插入/替换帖子/线程/配置文件?我不想在 Discourse 设置中进行所有设置,然后让这个导入器清除这些设置,尽管我没有在代码中看到任何与此相关的设置。
是的,但请备份。您可能需要多次更改设置并重新运行,从头开始,因此请保留一份没有导入数据的配置备份。
它会插入。它基本上不会替换任何内容。如果用户已存在,它不会更改该用户。它不会使用您设置的类别。如果您再次运行它,并使用来自旧网站的更新数据库,它将添加新数据,但不会更改早期运行中已导入的内容。这样可以大大加快速度,但如果您出于某种原因需要更改脚本,则需要删除所有内容并重新开始。
有两个问题。首先,有没有办法让这个运行得更快?我使用的是拥有 64GB 内存的 32 核 CPU Linode,但导入 25 万篇帖子仍然需要 4-5 小时。
其次,它是在帖子之前还是之后导入附件?因为查看脚本,它似乎是在之后导入的。仅仅是等待 4-5 小时才发现附件没有导入,这真令人沮丧。
在很大程度上,一切都取决于之前的数据,后期处理可以利用多核 CPU,但这要等到全部处理完成之后才能开始。选择一个更快的单核 CPU。
你可以修改脚本,使其只导入最近上传的数据,但如果你不打算进行重大开发,那就再等 5 个小时吧。
我已经尝试了几次,附件仍然没有被导入,我快没辙了。希望有人能帮帮我(感谢 @pfaffman 到目前为止的输入)。
我已经将 *.data 文件按照 xenforo 的原始文件夹结构(即“attachments”文件夹)放在了 docker 容器内的 /root/attachments 中。我已经将导入脚本更新到了 /root/attachments。我可以在命令行中使用 ls 命令看到 /root/attachments 中的文件。
我已经运行了脚本,每次(在大约 4-5 小时等待后),所有带有附件/照片的帖子都会显示 xenforo 的旧 bbcode([ATTACH]123456[/ATTACH]),并且我在 discourse 安装中看不到任何图片或附件。
我可能在哪里做错了?我觉得我离成功只有 90% 了,只是遗漏了什么。
您需要查看代码。附件代码是否正在运行?您的附件是否符合脚本期望的格式?
如果附件函数是在导入帖子之后运行的,那么您就不需要再次运行整个函数,它只会跳过帖子(或者注释掉帖子导入以使其运行得更快)。
但是,可能有很多问题,从您配置不正确到它根本无法与您的 ZenForo 版本一起使用。您需要查看代码并添加一些调试输出来了解发生了什么。
就此线程中的任何人而言,我无法在此脚本中使用附件,无论我将它们放在哪里。在我看来,该脚本需要改进,并且说明尤其需要大量改进,以更清楚地说明什么放在哪里以及如何放置。
在此之前,我会认为此脚本已损坏。
它可能在某些版本和某些配置下对某些人有效,只是不是你正在使用的那个。令人惊讶的是,每次导入的差异有多大。
XenForo 官方导入脚本现在坏了吗?
用户和分类的导入正常,
导入带有附件文件夹的帖子时出现问题
script/import_scripts/xenforo.rb:180:in `block in import_posts'
/var/www/discourse/script/import_scripts/base.rb:908:in `block in batches'
/var/www/discourse/script/import_scripts/base.rb:907:in `loop'
/var/www/discourse/script/import_scripts/base.rb:907:in `batches'
script/import_scripts/xenforo.rb:174:in `import_posts'
script/import_scripts/xenforo.rb:32:in `execute'
/var/www/discourse/script/import_scripts/base.rb:47:in `perform'
script/import_scripts/xenforo.rb:396:in `<main>'
113289 / 146471 ( 77.3%) [3766 items/min] 创建帖子 162516 时出现异常。正在跳过。
undefined method `synchronize' for #<DiscourseRedis:0x00005571b2d0c5b8>
/var/www/discourse/lib/discourse_redis.rb:44:in `method_missing'
/var/www/discourse/lib/distributed_mutex.rb:84:in `try_to_get_lock'
/var/www/discourse/lib/distributed_mutex.rb:61:in `get_lock'
/var/www/discourse/lib/distributed_mutex.rb:30:in `block in synchronize'
/var/www/discourse/lib/distributed_mutex.rb:29:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:29:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:14:in `synchronize'
/var/www/discourse/lib/post_creator.rb:407:in `transaction'
/var/www/discourse/lib/post_creator.rb:205:in `create'
/var/www/discourse/script/import_scripts/base.rb:580:in `create_post'
/var/www/discourse/script/import_scripts/base.rb:528:in `block in create_posts'
/var/www/discourse/script/import_scripts/base.rb:515:in `each'
/var/www/discourse/script/import_scripts/base.rb:515:in `create_posts'
script/import_scripts/xenforo.rb:180:in `block in import_posts'
/var/www/discourse/script/import_scripts/base.rb:908:in `block in batches'
/var/www/discourse/script/import_scripts/base.rb:907:in `loop'
/var/www/discourse/script/import_scripts/base.rb:907:in `batches'
script/import_scripts/xenforo.rb:174:in `import_posts'
script/import_scripts/xenforo.rb:32:in `execute'
/var/www/discourse/script/import_scripts/base.rb:47:in `perform'
script/import_scripts/xenforo.rb:396:in `<main>'
113290 / 146471 ( 77.3%) [3766 items/min] 创建帖子 162517 时出现异常。正在跳过。
undefined method `synchronize' for #<DiscourseRedis:0x00005571b2d0c5b8>
/var/www/discourse/lib/discourse_redis.rb:44:in `method_missing'
/var/www/discourse/lib/distributed_mutex.rb:84:in `try_to_get_lock'
/var/www/discourse/lib/distributed_mutex.rb:61:in `get_lock'
/var/www/discourse/lib/distributed_mutex.rb:30:in `block in synchronize'
/var/www/disc
您有哪个版本的 Redis?
我好不容易才将现有的 XenForo 社区勉强迁移到 Discourse,所以我想在这里分享我的经验,希望能帮助到正在尝试做同样事情的人。请记住,我并不懂我在做什么,所以我的一些推断可能不正确。我成功地将数据导入 Discourse,附件丢失率约为 20%。我无法真正解释原因,但这个问题似乎只影响了我论坛过去 2-3 年的帖子,而在此之前的所有帖子的导入成功率约为 95% 以上。我唯一的猜测是这与从 XF 1.x 迁移到 XF 2.x 有关。
任何尝试这样做的人都应该知道,这个脚本需要大量更新才能与 XF 2.x 配合使用。特别是,第 375-378 行没有正确的数据库表来导入 Xenforo Media Gallery 的附件。我通过断开 XFMG 与论坛的连接并卸载它来解决这个问题,因为我当时只使用 XFMG 来镜像论坛的附件。
如果你好奇的话,第 376 行指的是表 xengallery_media,这显然是指 XFMG 1.x,因为在 XFMG 2.x 中,这个表已被更改为 xf_mg_media_item。其余部分我无法匹配,我怀疑需要一些额外的代码来匹配附件与帖子的 ID。
我最终注释掉了第 314 行:s = process_xf_attachments(:gallery, s)
这样脚本就不会因为缺少 SQL 表而报错。
完成这些之后,我遵循了 @Jack51 在此帖子中的帖子:
并进行了以下编辑:
第六步需要更新 mariadb 版本。将 mariadb-server-10.3 改为 mariadb-server-10.5。
第七步应该是 service mariadb start 而不是 service mysql start。
我确实更改了
frozen_string_literal: true
为
frozen_string_literal: false
因为我遇到了和这个帖子里其他人提到的同样的错误。
这个帖子里似乎有很多关于附件应该放在哪里才能被脚本识别的困惑,我承认我也遇到了一些困难。对于像我这样完全不熟悉 docker 的人来说,指出 docker 本质上是在你的服务器上运行的虚拟机(所以你实际上是在处理两个不同的操作系统/文件系统),但有一个用于传输文件的共享空间会非常有帮助:
/var/discourse/shared/standalone/tmp
这个目录位于你的主机上,放在那里的文件会出现在:
/shared/tmp
当你进入 docker 容器后。所以,假设你保留了 xenforo 的相同文件/文件夹结构,你会将文件夹复制:
internal_data/attachments
到主机上的
/var/discourse/shared/standalone/tmp
然后,在进入你的 docker 容器后,该文件夹将出现在 /shared/tmp。
接下来,在编辑 xenforo.rb 脚本时,将:
ATTACHMENT_DIR = '/tmp/attachments'
更改为:
ATTACHMENT_DIR = '/shared/tmp/internal_data/attachments'
这样你的附件就会被放在正确的位置。值得注意的是,xenforo 还有一个 data/attachments 文件夹,但里面充满了 .jpg 文件而不是你正在寻找的 .data 文件。我看到有人在这个帖子里之前犯了这个错误,所以我觉得值得指出来。
另外,我收到了一个脚本的权限错误,所以你可能需要 chmod 该目录:
sudo chmod a+rw -R /shared/tmp/internal_data/
我认为最大的线索是脚本没有识别到你的附件,因为它会异常安静,而它应该会偶尔输出错误:
所以如果导入进行了几个小时而没有列出任何错误,那很可能就是没有识别到附件。
这就是我所知道的。别误会,我很高兴这个脚本存在,80% 的成功率总比没有好(我在 2009 年从 vBulletin 迁移到 Xenforo 时也有类似的成功率),而且我很高兴能使用 Discourse 平台。希望这篇帖子能帮助到一些人,也许有一天,比我技能更好的人能够更新这个脚本,使其工作得更好一些。
导入脚本的当前版本遗漏了许多附件,因为它们并不总是嵌入到帖子 BBcode 中。我已提交一个 pull request,其中包含许多改进和修复。该脚本现在可以识别所有附件,还可以导入点赞、头像和私人消息,并为类别和主题创建永久链接。
@gerhard 我认为那个 PR 目前由你负责,有时间的话可以合并吗?
是的,我昨天注意到了。
我完全忘记了。今天或下周会回顾一下。
这现在合并到代码中了?我因为其他原因不得不回到 xenforo,但我想在脚本工作时迁移到 discourse。
抱歉,我本应该直接查看 github 的,看起来它是在 11 月 28 日合并的。
6 个帖子被拆分到一个新主题:AVATAR_DIR 常量未在 XenForo 导入脚本中指定
我只是想跟进一下,让任何试图从 Xenforo 迁移(并通过谷歌等方式找到此帖)的人知道,Flarum 论坛软件有一个正在测试的导入器:
很有趣,但如果我们有一个可靠的 XenForo 到 Discourse 导入器,那会更有趣。
这位绅士似乎对他所做的事情非常有信心,我对此表示赞赏!
我最近进行了一次 XenForo 导入。我确实做了一些修改来添加一些功能,但我现在不记得哪些不是特定于该论坛的了。

