将 FluxBB 论坛迁移到 Discourse

我创建了一个迁移 脚本,用于将 FluxBB 数据库导入 Discourse。接下来,我将分步讲解导入过程。

我使用 FluxBB v1.5.10(当前最新版本)测试了此迁移脚本。

可以导入哪些数据?

  • 用户(包括个人简介/签名)
  • 用户组
  • 分类
    :warning: 权限不会被导入,所有分类默认为公开。导入后需手动设置正确的权限。
  • 主题(包括置顶/固定状态)
  • 帖子
  • 被禁用户

在开始迁移之前,请在您的机器(或虚拟机内)搭建开发环境。请参阅 OS XUbuntu 的开发安装指南。

Discourse 需要 Ruby 3.4+ 版本。要检查您的 Ruby 版本,请运行以下命令:

ruby -v

MySQL

现在我们需要 mysql2 gem 以便 Ruby 能够连接旧的 FluxBB 数据库。运行以下命令安装 libmysqlclient-dev 依赖项和 mysql2 gem:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install libmysqlclient-dev
gem install mysql2

(可选)将 MySQL 转储文件导入本地

若要安装 MySQL 客户端并将 MySQL 转储文件 (.sql) 导入到您的开发机器,请遵循以下说明:

sudo apt-get install mysql-server mysql-client

创建 MySQL 用户、授权和数据库:

mysql -u root -p mysql
mysql> CREATE USER 'fluxbb'@'localhost' IDENTIFIED BY 'fluxbb';
Query OK, 0 rows affected (0.00 sec)
.
mysql> CREATE DATABASE fluxbb;
Query OK, 1 row affected (0.01 sec)
.
mysql> GRANT ALL PRIVILEGES ON fluxbb.* TO 'fluxbb'@'localhost';
Query OK, 0 rows affected (0.00 sec)
.
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
.
mysql> exit

导入您的 FluxBB 数据库转储文件:

mysql -u fluxbb -p fluxbb < myfluxbb.sql

BBCode 转 Markdown

导入脚本会自动处理 BBCode 到 Markdown 的转换。无需安装额外的 gem。


安装 mysql2 后,进入您的 Discourse 安装目录并打开 Gemfile 进行编辑。

cd ~/discourse
sudo nano Gemfile

现在在文件末尾插入以下行,将 mysql2 gem 添加到 Discourse 中:

gem 'mysql2'

在运行导入脚本之前,请逐行将以下代码粘贴到您的 shell 中。(使用方向键编辑值)

export FLUXBB_HOST="localhost"
export FLUXBB_DB="fluxbb"
export FLUXBB_USER="root"
export FLUXBB_PW=""
export FLUXBB_PREFIX=""

现在可以运行导入脚本了。运行以下命令开始迁移:

RAILS_ENV=production bundle exec ruby script/import_scripts/fluxbb.rb

等待导入完成。如果进度变得极慢,您可以重新启动它。

完成后,恭喜! 您的数据库已成功从 FluxBB 迁移到 Discourse :thumbsup:

启动您的 Discourse 实例:

bundle exec rails server

启动 Sidekiq 并让它开始工作:

bundle exec sidekiq -q critical,4 -q default,2 -q low

根据论坛规模,这可能需要较长时间。您可以在 http://localhost:3000/sidekiq 监控进度。

现在,从管理员页面 /admin/backups 备份数据,并将其导入到您的在线 Discourse 网站中。

12 个赞
discourse@app-deb10-app:/var/www/discourse$ FLUXBB_HOST="localhost" FLUXBB_DB="flux" FLUXBB_USER="fluxbb" FLUXBB_PW="fluxbb" RAILS_ENV=production bundle exec ruby script/import_scripts/fluxbb.rb 
正在加载现有群组...
正在加载现有用户...
正在加载现有分类...
正在加载现有帖子...
正在加载现有主题...

正在创建群组
回溯(最近调用优先):
	9: 来自 script/import_scripts/fluxbb.rb:262:in `<main>'
	8: 来自 /var/www/discourse/script/import_scripts/base.rb:47:in `perform'
	7: 来自 script/import_scripts/fluxbb.rb:40:in `execute'
	6: 来自 script/import_scripts/fluxbb.rb:50:in `import_groups'
	5: 来自 script/import_scripts/fluxbb.rb:258:in `mysql_query'
	4: 来自 /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-2.3.2/lib/patches/db/mysql2/alias_method.rb:22:in `query'
	3: 来自 /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:130:in `query'
	2: 来自 /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:130:in `handle_interrupt'
	1: 来自 /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `block in query'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `_query': 表 'flux.groups' 不存在 (Mysql2::Error)

看起来 mySQL 数据库中不存在这些表。建议先登录 mySQL 数据库,查看其中有哪些表。您可能需要修改脚本以使其正常工作。

2 个赞

以下是详细步骤。

这个导入器在现代 Discourse 版本中是否已损坏?

我正在运行一个使用 https://github.com/discourse/discourse/blob/main/docs/INSTALL.md(又名“唯一官方支持的 Discourse 安装”)安装的 Discourse 实例。

我确实在一个 Docker 容器内设置了一个 MariaDB 数据库,并将我的论坛转储导入到那里,等等,因为任何其他方法都很难设置。我所做的一切都在 cd /var/discourse/ && ./launcher enter app shell 中完成。

运行 bundle exec ruby script/import_scripts/fluxbb.rb bbcode-to-md 会失败并出现以下错误:

/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.4.3/lib/active_record/connection_adapters/postgresql_adapter.rb:81:in `rescue in new_client
': We could not find your database: discourse. Which can be found in the database configuration file located at config/database.yml. (ActiveRecord::NoDatabaseError)

在同一个 shell 中运行 sudo -u postgres psql discourse 可以正常登录到“discourse”数据库。

抱歉,我之前的假设是错误的,原因很简单:

该脚本应该使用 discourse 用户运行,而不是像我之前那样在容器内以 root 身份运行。

除了某些 BB 代码未转换外,其他一切似乎都运行良好。谢谢!

Tests, fixes, and a small (optional) feature to allow a FluxBB config to work by harry-wood · Pull Request #6 · nlalonde/ruby-bbcode-to-md · GitHub 似乎是一个不错的 PR,修复了 BB 代码转换问题。

重要警告

此导入程序将忽略权限设置。

您的所有论坛都将被设为公开

如果您有仅限版主阅读的论坛,在使用此导入程序后,任何人都可以阅读它们。

1 个赞

导入后,您可以手动修改分类的权限。手动修复它们可能不是什么大问题。

添加对导入权限的支持可能比手动执行要复杂。

1 个赞

感谢您报告此问题,我已在指南中添加了相关警告。

2 个赞