导入 XenForo 附件时遇到问题

大家好,

我已成功将 XenForo 数据库(包含 1500 名成员和约 75,000 篇帖子)迁移到运行 Discourse 的新服务器。

关于附件有一个问题:从脚本中可以看到,如果附件文件夹存在,脚本就会执行导入。我的问题是,我需要将旧服务器的附件放在哪里:

a) 服务器的 Docker 部分(某个位置)
b) 原始位置 /var/discourse/shared/standalone/tmp/attachments

1 个赞

有人知道路径吗???

1 个赞

您将文件放置在导入机器可访问的任意位置,并将该路径填写在此处:

  ATTACHMENT_DIR = '/tmp/attachments'

如果您在 Docker 容器中运行,并将文件放在 var/discourse/shared/standalone/tmp/attachments 下,则路径应使用 /shared/tmp/attachments。您可以通过进入容器后查看文件来确认。

2 个赞

好的,Jay,谢谢你的信息。这次我进行的是干净安装,并设置了附件文件夹。我将把附件放在 /shared/tmp/attachments,然后回来反馈结果。

还有一个小问题……是否有任何方法可以导入账户的密码?

有人能看看问题出在哪里吗?

root@my-app:/var/www/discourse# RAILS_ENV=production bundle exec ruby script/import_scripts/xenforo.rb
正在加载现有群组...
正在加载现有用户...
正在加载现有分类...
正在加载现有帖子...
正在加载现有主题...

正在创建用户
跳过 100 个已导入的用户
跳过 100 个已导入的用户
跳过 100 个已导入的用户
跳过 100 个已导入的用户
跳过 100 个已导入的用户
跳过 100 个已导入的用户
跳过 100 个已导入的用户
跳过 100 个已导入的用户
跳过 100 个已导入的用户
跳过 100 个已导入的用户
跳过 100 个已导入的用户
跳过 100 个已导入的用户
跳过 100 个已导入的用户
跳过 100 个已导入的用户
跳过 100 个已导入的用户
跳过 4 个已导入的用户

正在导入分类...
       23 / 23 (100.0%)  [326682 项/分钟]
正在创建主题和帖子
       74 / 74752 (  0.1%)  [99817 项/分钟]  回溯(最近一次调用在最后):
        18: from script/import_scripts/xenforo.rb:396:in `\u003cmain\u003e'
        17: from /var/www/discourse/script/import_scripts/base.rb:47:in `perform'
        16: from script/import_scripts/xenforo.rb:32:in `execute'
        15: from script/import_scripts/xenforo.rb:174:in `import_posts'
        14: from /var/www/discourse/script/import_scripts/base.rb:869:in `batches'
        13: from /var/www/discourse/script/import_scripts/base.rb:869:in `loop'
        12: from /var/www/discourse/script/import_scripts/base.rb:870:in `block in batches'
        11: from script/import_scripts/xenforo.rb:180:in `block in import_posts'
        10: from /var/www/discourse/script/import_scripts/base.rb:490:in `create_posts'
         9: from /var/www/discourse/script/import_scripts/base.rb:490:in `each'
         8: from /var/www/discourse/script/import_scripts/base.rb:491:in `block in create_posts'
         7: from script/import_scripts/xenforo.rb:186:in `block (2 levels) in import_posts'
         6: from script/import_scripts/xenforo.rb:315:in `process_xenforo_post'
         5: from script/import_scripts/xenforo.rb:324:in `process_xf_attachments'
         4: from /usr/local/lib/ruby/2.6.0/set.rb:338:in `each'
         3: from /usr/local/lib/ruby/2.6.0/set.rb:338:in `each_key'
         2: from script/import_scripts/xenforo.rb:326:in `block in process_xf_attachments'
         1: from /usr/local/lib/ruby/gems/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/filters.rb:22:in `squish!'
/usr/local/lib/ruby/gems/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/filters.rb:22:in `gsub!': 无法修改冻结的字符串 (FrozenError)
root@my-app:/var/www/discourse#

这次我已将附件放到:var/discourse/shared/standalone/tmp/attachments

我找到了……问题在于,包含待导入附件的文件夹必须位于 Docker 应用内的路径 /var/www/discourse/........./tmp/attachments 中。

现在没问题了,脚本正在运行,预计将在约 1.5 小时后完成。

编辑:似乎附件导入又无法正常工作了……目前导入进度为 78%,在我们曾包含图片或附件的每条帖子中,都显示为 [ATTACH]9788[/ATTACH],标签之间的数字即为已上传的编号,下一个将是 [ATTACH]9789[/ATTACH]……

如有任何帮助,将不胜感激 :confused:

1 个赞

如果您在正确设置 attachment_dir 之前导入了任何帖子,则需要删除所有帖子并重新开始导入。

很遗憾,导入现已完成,但我在日志中没有看到任何关于附件的信息?

如果您运行了导入脚本,但附件目录不存在,则附件会被跳过。

我没做那件事……我已经带着附件重新运行了导入。

我想我在这里无法帮到您。如果您有预算,请访问 Redirecting…

这是我最后的建议:我相当确定附件并不在脚本能够找到的位置,您需要删除所有内容并重新开始。

在再次运行脚本之前,请在文件夹内部输入:

 ls /tmp/attachments

其中 /tmp/attachments 是您在以下行中设置的值:

  ATTACHMENT_DIR = '/tmp/attachments'

如果它没有列出附件,您需要继续尝试找出它们的位置。

2 个赞

好的,您能确切地告诉我将 XenForo 的附件放到新服务器的哪个位置吗?这样我就能确保脚本一定能找到它们。

有人吗?

我正在做全新的导入(第 5 次)……我累了……:roll_eyes:

我是否需要按某种顺序整理 XenForo 的附件,还是只需复制/粘贴结构以及 /tmp/attachments 目录?

我目前正在新的虚拟机上进行安装,并使用了快照,以便快速更改配置并重新开始迁移。

昨天,我将 XenForo 的附件文件夹放入 var/discourse/shared/standalone/tmp/attachments。该文件夹结构如下:主文件夹名为 attachments,内部包含 9 个子文件夹,名称从 0 到 9,每个子文件夹内约有 600-700 个附件(.jpg 文件)。我还修改了 xenforo.rb 脚本,添加了以下内容:

ATTACHMENT_DIR = '/shared/tmp/attachments'

我使用 ls /tmp/attachments 进行了测试,确认目录结构正确,但仍然遇到了与第一次相同的错误:

创建主题和帖子
       74 / 74752 (  0.1%)  [99817 项/分钟]  回溯(最近一次调用最后):
        18: from script/import_scripts/xenforo.rb:396:in `<main>'
        17: from /var/www/discourse/script/import_scripts/base.rb:47:in `perform'
        16: from script/import_scripts/xenforo.rb:32:in `execute'
        15: from script/import_scripts/xenforo.rb:174:in `import_posts'
        14: from /var/www/discourse/script/import_scripts/base.rb:869:in `batches'
        13: from /var/www/discourse/script/import_scripts/base.rb:869:in `loop'
        12: from /var/www/discourse/script/import_scripts/base.rb:870:in `block in batches'
        11: from script/import_scripts/xenforo.rb:180:in `block in import_posts'
        10: from /var/www/discourse/script/import_scripts/base.rb:490:in `create_posts'
         9: from /var/www/discourse/script/import_scripts/base.rb:490:in `each'
         8: from /var/www/discourse/script/import_scripts/base.rb:491:in `block in create_posts'
         7: from script/import_scripts/xenforo.rb:186:in `block (2 levels) in import_posts'
         6: from script/import_scripts/xenforo.rb:315:in `process_xenforo_post'
         5: from script/import_scripts/xenforo.rb:324:in `process_xf_attachments'
         4: from /usr/local/lib/ruby/2.6.0/set.rb:338:in `each'
         3: from /usr/local/lib/ruby/2.6.0/set.rb:338:in `each_key'
         2: from script/import_scripts/xenforo.rb:326:in `block in process_xf_attachments'
         1: from /usr/local/lib/ruby/gems/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/filters.rb:22:in `squish!'
/usr/local/lib/ruby/gems/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/filters.rb:22:in `gsub!': 无法修改冻结的字符串 (FrozenError)
root@my-app:/var/www/discourse#

2019-11-15T23:00:00Z

我移除了 gsub! 字符串中的 !,修改位置如下:

/usr/local/lib/ruby/gems/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/filters.rb

现在,导入脚本不再停止,而是继续运行,并显示有关附件的以下信息:

不过,例如最后一条信息:

未找到文件 /shared/tmp/attachments//2/2485-c3da9f6ee1e33d3ebf418c5dea1f9e8a.data。跳过附件 ID 2485

该文件确实位于该路径下,但并没有 .data 文件,而是 .JPG 文件。

欢迎提供任何帮助。

2019-11-15T23:00:00Z

脚本存在一个 bug,我已经找到并修复了它,现在可以成功导入附件。

1 个赞