Wanderer
(Federico)
1
您好,我正在尝试将旧的phpBB2论坛导入到新的Discourse中。
我按照您的文档说明,完成了从phpBB2到phpBB3的初步导入。
我在导入头像(未导入)和密码时遇到了问题。Discourse肯定使用与phpBB2不同的加密方法,所以我想编写一些代码,在首次登录时检查密码是否以phpBB2的方式加密,检查使用phpBB2加密(md5?)的密码是否与保存的哈希值匹配,然后用Discourse的加密方式重写它。
通常情况下,使用“老而可靠”的PHP和MySQL,这只需要半小时就能完成,但对于Discourse,我甚至不知道从哪里开始修改源代码。我旧的phpBB2经过了大量修改(因此我从未将其更新到phpBB3),但我知道这不是一个好习惯,我不想弄乱Discourse并失去其更新的自动化功能,所以我想请教一下我该如何处理我的需求。我应该开发一个插件吗?有没有可能在新版本的“beta”中加入这个功能?
谢谢。
pfaffman
(Jay Pfaffman)
2
要导入密码,您需要 Migrated password hashes support 插件。这或许能解决您的密码问题。
很难说您的头像问题是因为数据不兼容,还是您没有正确配置脚本。
1 个赞
Wanderer
(Federico)
3
感谢您的提示,我会尽快尝试。关于头像,我已按照您的指南仔细检查了每一步,但没有成功。不过,由于我将不得不重复导入,我会尝试关注每一步并向您汇报。
1 个赞
Joulinar
(Joulinar)
4
我不是这个话题的所有者,但我很高兴能参与进来,因为我基本上在经历同样的旅程。
目前我正在尝试使用 import_phpbb3,在创建用户时已经遇到了一些挑战。我想迁移用户头像,但似乎并非对所有用户都有效。对于某些用户,我遇到了以下问题:
Failed to upload avatar for user myuser: /shared/import/data/images/avatars/upload/phpbb_avatar_2.png
#<ActiveModel::Errors:0x00000055a4b3de78 @base=#<Upload id: nil, user_id: nil, original_filename: "avatar.png", filesize: 0, width: nil, height: nil, url: nil, created_at: nil, updated_at: nil, sha1: nil, origin: nil, retain_hours: nil, extension: nil, thumbnail_width: nil, thumbnail_height: nil, etag: nil, secure: false, access_control_post_id: nil, original_sha1: nil, animated: nil, verification_status: 1, security_last_changed_at: nil, security_last_changed_reason: nil>, @errors=[#<ActiveModel::Error attribute=base, type=Sorry, the image you are trying to upload is too large (maximum dimension is 80-megapixels), please resize it and try again., options={}>]>
问题似乎出在 png 文件格式上。是否可以导入 png 文件,或者它们需要是 gif/jpg 格式?oxipng 已经安装。
root@DietPi4-import:/var/www/discourse# which oxipng
/usr/local/bin/oxipng
root@DietPi4-import:/var/www/discourse#
关于密码插件。它作为构建导入容器的一部分被激活了。或者它也需要在 discourse 容器上完成吗?有没有办法查看它是否有效,或者用户需要自己尝试一下?
提前表示感谢。
Canapin
(Coin-coin le Canapin)
5
迁移密码插件仅应在迁移完成后在论坛上激活,否则它可能导致错误在用户导入期间。
要查看它是否正常工作,只需激活它并尝试使用旧密码登录。
3 个赞
Joulinar
(Joulinar)
6
感谢 @Canapin 的反馈。在这种情况下,我将在导入容器完成导入后重建生产容器,然后再重新启动它。
顺便说一句:管理员团队能否检查一下我最初的帖子?似乎我调整得太多了,被标记为垃圾邮件了 
Canapin
(Coin-coin le Canapin)
8
需要更多信息。使用的是哪个版本的 phpBB?有错误消息吗?
您能详细说明一下“无法运行”吗?
1 个赞
Joulinar
(Joulinar)
9
已在上面分享。看来导入脚本无法正确读取 PNG 文件,因为基本上所有值都是 nil。
Canapin
(Coin-coin le Canapin)
10
哦抱歉,我没看到你已经发了这个问题。我帮不了你,抱歉,我没有这方面的技能。
编辑:(也许为了防止我这个小小的“失误”,你可以回复你自己的消息,这样我就可以看到你的第一条消息了)
gerhard
(Gerhard Schlager)
11
我有时会在迁移过程中看到这种情况,受影响的文件通常无法在图像查看器中打开,因为文件格式未知。我一直认为这些文件多年来已损坏。
您确定您要导入的 PNG 文件是有效的图像文件吗?如果是,您可以分享一个示例吗?另外,您是在 Docker 容器内还是在开发环境中导入?
3 个赞
Joulinar
(Joulinar)
12
TL;DR;图片在传输到 Linux 服务器时损坏了。
@gerhard 我百分之百确定我的 PNG 文件是有效且正确的,因为我可以在 Windows 电脑上打开它们。但是你的提示给了我正确的方向,我验证了 PNG 文件在 Linux 服务器上的样子。你完全正确,所有的 PNG 文件都损坏了。根本原因是传输方式。我使用了 SCP (WinSCP),PNG 文件被当作文本文件传输,导致损坏。在我新的尝试中,我将所有内容传输为 7z 压缩包,然后直接在 Linux 服务器上解压。这次导入工作正常。
非常感谢你的支持,给了我正确的方向 
虽然我现在 99.9% 的帖子导入都工作正常,但我还有一个问题。是否有办法同时传输“已解决主题”的状态?在新生产环境论坛中,我计划使用 discourse-solved。问题是如何将旧状态迁移到新环境?
再次:非常感谢你的支持。
2 个赞
gerhard
(Gerhard Schlager)
13
我不了解 phpBB 中的已解决状态。这是一个扩展/mod 吗?我猜你需要自定义导入脚本才能导入它。
Joulinar
(Joulinar)
14
我查看了 phpbb 数据库,现在我知道了存储有关主题/帖子已解决信息的字段。只需要弄清楚如何在 Discourse 数据库中存储它。
1 个赞
pfaffman
(Jay Pfaffman)
15
您可以查看支持该功能的其他导入脚本(我认为搜索“已解决”),您需要在导入实例中安装插件。
1 个赞
Joulinar
(Joulinar)
16
感谢您的回答,但这似乎超出了我的能力范围。
在源 phpbb 数据库中,解决主题的帖子 ID 存储在:
phpbb_topics.topic_solved。
在 Discourse 中,信息存储在 3 个不同的字段中(如果我没记错的话):
post_custom_fields.is_accepted_answer
topic_custom_fields.accepted_answer_post_id
topic_custom_fields.solved_auto_close_topic_timer_id
据我所知,在导入过程中会进行某种映射,因为 topic + post 的 ID 会发生变化。
但我的知识就到此为止了。
1 个赞
pfaffman
(Jay Pfaffman)
17
那么,解释如何修改和调试它可能也无法在此完成。如果你有预算,可以发布到 Marketplace 或联系我。
它存储在一个名为“import_id”的自定义字段中,并且有一些函数可供你进行查找,你可以在代码中看到。类似 topic_id_from_import_id()
2 个赞
Joulinar
(Joulinar)
18
感谢您的提议。我们是一个非常小的开源项目,没有真正的预算。起初我并不知道“主题已解决”功能是 phpbb 的一个非标准扩展(在论坛创建多年后才加入),并认为修复它可能很容易。但我明白这是一个个性化需求,需要花费时间来处理。
再次感谢各位帮助我使其近乎完美地工作。
哦,对了,各位,phpbb 已从版本 3.3.5 迁移。它一直运行良好,即使不受支持。
2 个赞
pfaffman
(Jay Pfaffman)
19
如果你能弄清楚涉及话语的表,你或许就能从另一个导入器中复制几行代码。
1 个赞
Joulinar
(Joulinar)
20
我明白了。它将 phpbb 的帖子/主题 ID 与 Discourse 的帖子/主题 ID 映射起来。
这个例子似乎是导入“已接受答案”的一个好例子 discourse/script/import_scripts/lithium.rb at 44f7a61c2c5b6f248a62ab7f987ebbd3091c71ef · discourse/discourse · GitHub
但是,如果我理解正确的话,第一步我需要将 phpbb_topics.topic_solved 的值存储/导入到 postgres 中,对吗?
1 个赞