我的 phpBB 迁移之旅 (postgresql)

软删除的帖子会被导入为普通帖子(并且可见)。这显然是个问题,因为我认为用户默认会软删除,而且已删除的帖子可能包含敏感信息。

相关的列包括:post_delete_user, post_delete_time, post_visibility, post_delete_reason

似乎只有 post_visibility 是相关的——如果帖子被软删除然后恢复,其他列的值不会被清除。正常 = 1,不可见 = 2

我的修复方法是直接丢弃软删除的帖子,因为没人关心。

在迁移之前,在你的源数据库上运行这个:

DELETE FROM phpbb_posts WHERE post_visibility = 2;
1 个赞

我有一个简陋的“持续迁移”流程。它包含一系列 shell 脚本,用于执行以下任务:

  • 从远程服务器拉取 phpbb 数据库、附件等
  • 创建/管理 discourse 实例
  • 在从模板实例创建 discourse 实例时应用特定的 site_settings
  • 备份/恢复它们
  • 使用 git 仓库中的特定导入脚本运行迁移
  • 执行迁移后任务

基本上,这允许我在迁移前的 discourse dctemplate 实例上进行工作,并对其进行随意调整。我继续调整 discourse 设置以符合我的喜好。

每晚,我都会从现有的实时 phpbb 拉取数据,并在新创建的 discourse 实例(dcstaging)上执行一次新的迁移,该实例是从最新的模板创建的。

当然,这需要几个小时,所以我还在本地运行一个具有非常小数据库的 phpbb,用于测试和改进迁移脚本。我可以在另一个 discourse 实例(dcdev)上进行相对快速的迁移测试。

因此,白天的测试工作流程如下:

在模板上做了一些工作,我很满意当前的状态:

./dc_template_create.sh dctemplate

糟糕,我的模板出错了。将其恢复到以前的状态:

./dc_template_restore.sh dctemplate

进行一次快速迁移以测试一些东西:

# 从 dctemplate 创建一个新实例 dcdev(并为 dcdev 应用特定的 site_settings)
./dc_template_restore.sh dcdev dctemplate
./dc_migrate.sh dcdev # 使用特定于该实例的迁移脚本仓库运行

进行一次从真实的、实时的 phpbb 进行的长时间迁移(过夜):

./dc_template_create.sh dctemplate
./dc_template_restore.sh dcstaging dctemplate

./phpbb_pull.sh
./dc_migrate.sh dcstaging
sleep 300
./dc_rake.sh dcstaging # 额外的迁移后任务,由导入器未处理(创建版主、详细标记、移动某些主题等)

如果有人足够感兴趣,我可以稍微清理一下并分享它。

2 个赞

Discourse 有标签,因此可以考虑利用标签来移除不必要的子分类。

我原来的子分类下有几个置顶/固顶主题,当它们合并到一个大分类下时,置顶主题就过多,会造成干扰。

我的解决方案是从以下分类结构:

Food
- American
- Chinese
- ...

改为:

Food
- Featured

美式、中式等变成标签,所有置顶主题移至“Featured”(精选)下,并取消置顶。

# 将分类下的所有置顶主题移至子分类
def move_pinned_topics_to_subcategory(category, subcategory_name)
  subcategory = Category.where(name: subcategory_name).find_by(parent_category_id: category.id)
  topics = Topic.where(category_id: category.id).where.not(pinned_at: nil)
  topics.each do |topic|
    topic.update(pinned_at: nil, pinned_globally: false, pinned_until: nil,
      category_id: subcategory.id) if not topic.title[/关于 .+ 分类/i]
  end
  Category.update_stats
end

food_cat = Category.find_by(name: 'Food')
move_pinned_topics_to_subcategory(food_cat, 'Featured')
4 个赞

我的论坛还有一个之前的、已废弃的版本(也是 phpBB),我们有一个它的 wget 站点抓取副本,所以我正在为此开发一个导入器。使用 nokogiri 解析 HTML 文件,将其摄入中间数据库,然后使用导入器基类将行导入 Discourse。

我看到了这个:

我猜这是一个不常见的问题,但如果其他人也面临这个问题,也许我会稍微打磨一下并分享它。请告诉我。

或者如果有人已经做了这个并且想和我分享,那就更好了。我还没有深入这个项目。

2 个赞