INSTAR
(Mike Polinowski)
2019 年11 月 4 日 13:17
1
我正在使用官方的 vBulletin v5 导入脚本 ,但遇到了一个问题。
我的 vBulletin 论坛结构如下:
/forum/
/forum/sub-category1/
/forum/sub-category1/thread1/
/forum/sub-category1/thread2/
/forum/sub-category2/
/forum/sub-category2/thread1/
/forum/sub-category2/thread2/
运行导入脚本后,Discourse 中只生成了两个分类,且没有任何主题:
/c/sub-category1
/c/sub-category2
我查看了另一个 vBulletin 论坛,发现他们的 URL 没有嵌套。因此我推测,在能够使用该脚本之前,我必须修改我的论坛结构如下:
/forum/
/forum/sub-category1/
/forum/sub-category2/
/forum/thread1a/
/forum/thread2a/
/forum/thread1b/
/forum/thread2b/
之后,我还需要手动为每个主题重新分配分类。
有人使用过这个脚本吗?
脚本中是否有某些地方一眼就能看出可以修改,以便支持更深层的嵌套结构?我可能完全走错了方向。
pfaffman
(Jay Pfaffman)
2019 年11 月 4 日 14:46
2
你说的“线程”是指 Discourse 话题吗?这些话题是否已创建,但未归类到正确的类别中?
INSTAR
(Mike Polinowski)
2019 年11 月 4 日 16:40
3
嘿,Jay,
谢谢你的回复。
啊,是的——我指的是 Discourse 话题。那里除了那些空分类外什么都没有。所有用户都已成功导入。
Mike
pfaffman
(Jay Pfaffman)
2019 年11 月 4 日 17:00
4
某些因素阻碍了主题和帖子的导入。按理说,运行时应该会显示错误。主题和帖子是在用户创建之后生成的。我认为主题和帖子是由独立的函数处理的。导入器应该像显示用户导入进度一样,显示它们的进度。
INSTAR
(Mike Polinowski)
2019 年11 月 5 日 03:56
5
导入过程中没有错误消息——仅在运行 create_users 函数时,针对无效用户邮箱地址出现了几条警告。但最终用户导入成功。以下是日志(我已移除包含客户邮箱地址的警告):
importing posts...
5 / 5 (100.0%) [290527 items/min]
importing attachments...
20182 / 5 (403640.0%)
我认为这里它只将我的五个分类识别为帖子并进行了导入,而对于那些未被导入的实际主题的所有附件,它不知道该如何处理?
免责声明 :
最初,导入失败,因为我收到的 vBulletin 数据库中没有 customprofilepic 表——我在此处添加了一个空表。
此外,没有自定义头像——因此导入脚本中引用的 AVATAR_DIR 只是我创建的一个空文件夹。我在导入脚本中注释掉了以下引用这些资源的行:
create_users(users, total: user_count, offset: offset) do |user|
username = @htmlentities.decode(user["username"]).strip
{
id: user["userid"],
name: username,
username: username,
email: user["email"].presence || fake_email,
admin: user['admin'] == 1,
password: user["password"],
website: user["homepage"].strip,
title: @htmlentities.decode(user["usertitle"]).strip,
primary_group_id: group_id_from_imported_group_id(user["usergroupid"]),
created_at: parse_timestamp(user["joindate"])
# post_create_action: proc do |u|
# @old_username_to_new_usernames[user["username"]] = u.username
# import_profile_picture(user, u)
# import_profile_background(user, u)
# end
}
end
但据我理解,这些更改仅影响用户创建。而用户已成功创建。
以下是我正在使用的完整导入脚本:
INSTAR
(Mike Polinowski)
2019 年11 月 5 日 04:10
6
该脚本会从 vBulletin 数据库中的 node 表收集所有主题。该表已存在,并包含约 34,000 条帖子。列名与脚本所引用的名称完全一致:
看起来应该能直接运行
INSTAR
(Mike Polinowski)
2019 年11 月 5 日 09:35
7
导入脚本会搜索 contenttypeid=23 和 contenttypeid=22 以创建帖子。
通过快速浏览 node 表,我可以确认 23 代表带有附件的帖子,而 22 应该是附件本身。
大多数帖子的 contenttypeid 为 21,即不带附件的帖子。我并未看到针对这些帖子的导入逻辑。或者,这是否由以下代码覆盖:
post_count = mysql_query("SELECT COUNT(nodeid) cnt FROM #{DBPREFIX}node WHERE parentid NOT IN (
SELECT nodeid FROM #{DBPREFIX}node WHERE contenttypeid=23 ) AND contenttypeid=22;").first["cnt"]
这段代码会处理在导入完 23/22 类型后剩余的所有内容。但除了 23/22/21 之外,还存在其他内容类型 ID,因此这段代码也会包含它们。
分类是相对于预设的 ROOT_NODE(值为 2 )进行导入的。我可能需要将其设置为 3,以支持我的“三级嵌套”URL?
更新:我刚刚使用 ROOT_NODE=3 重新运行了导入,但没有任何变化。
pfaffman
(Jay Pfaffman)
2019 年11 月 5 日 09:50
8
听起来您的 vBulletin 与脚本预期的不同。在能够导入帖子之前,您需要找出为何没有任何主题被创建。
INSTAR
(Mike Polinowski)
2019 年11 月 5 日 10:49
9
好的。问题出在 contenttypeid 上:
def import_categories
puts "", "正在导入顶级分类..."
categories = mysql_query("SELECT nodeid AS forumid, title, description, displayorder, parentid
FROM #{DBPREFIX}node
WHERE parentid=#{ROOT_NODE}
UNION
SELECT nodeid, title, description, displayorder, parentid
FROM #{DBPREFIX}node
WHERE contenttypeid = 20
AND parentid IN (SELECT nodeid FROM #{DBPREFIX}node WHERE parentid=#{ROOT_NODE})").to_a
例如,import_categories 函数使用了 contenttypeid = 23,这与脚本中用于帖子的 ID 相同。而分类的 ID 应为 20。通过在脚本中修改此值,我终于能够看到我的子分类/主题了:raised_hands
现在只剩下线程/帖子需要处理了。
michaeld
(Michael - Communiteq)
2020 年4 月 20 日 16:28
10
我已为 VBulletin5 导入器提交了一个包含若干更新的拉取请求。其中最重要的改动是移除了这些硬编码的 ID。
此外,对文件上传的支持也得到了改进,导入器现在可以导入标签,并为主题及(子)分类创建永久链接。