使用 Kubuntu 在虚拟机中将 myBB 论坛迁移到 Discourse

总结一下(比这篇帖子长得多 :wink: 的旅程:

注意:我在此过程中使用了虚拟机中运行的 Kubuntu 发行版,因此请注意,在不同的操作系统甚至不同的发行版上可能不尽相同。

0. 安装 Discourse 开发环境

按照这篇帖子并运行帖子中链接的这个脚本,使用

`bash <(wget -qO- https://raw.githubusercontent.com/discourse/install-rails/master/linux)`

如那里所述,再加上克隆源代码

git clone https://github.com/discourse/discourse.git ~/discourse

1. 准备 MySQL 数据库

按照线程顶部的说明获取原始 mybb 数据库的转储:

$ mysqldump -u USER_NAME -p DATABASE_NAME > mybb_dump.sql

并将其复制/移动到新设置的开发环境中。

安装 MySQL 服务器

$ sudo apt-get install mysql-server

MySQL 的身份验证在较新版本中已更改。如今,如果您想成为 MySQL 的 root 用户,则必须是主机的 root 用户,因此

$ sudo mysql

而不是

$mysql -u root

当然,您必须首先是“sudoer”(管理员)

$ sudo mysql
mysql> CREATE DATABASE mybb;
mysql> SHOW DATABASES;
mysql> CREATE USER 'nonrootuser'@'localhost' IDENTIFIED BY 'password';
mysql> GRANT ALL PRIVILEGES ON mybb.* TO 'nonrootuser'@'localhost';
mysql> quit
$ mysql -unonrootuser -ppassword mybb < mybb_dump.sql

<在此处您会收到有关在命令行提供密码不妥的警告>

$ sudo mysql
mysql> USE mybb;
mysql> SHOW TABLES;

<在此处验证所有表是否都存在 - 请参阅原始帖子>

mysql> quit

2. 安装 Ruby gems

检查当前源代码中的 Gemfile 会发现

$ echo "gem 'mysql2', require: false" >> Gemfile

并非真正需要。只需将环境变量 IMPORT 设置为 1 即可。
但需要的是 MySQL 客户端的开发文件,这正是下面第一行所说的

$ sudo apt-get install libmysqlclient-dev
$ cd ~/discourse
$ IMPORT=1 bundle install

2. 准备 Discourse(PostgreSQL 数据库)

$ bundle exec rails db:drop
$ bundle exec rails db:create
$ bundle exec rails db:migrate
$ export DB_PW="password"
$ export DB_USER="nonrootuser"

3. 执行实际导入

下一行修复了 mybb.rb 导入脚本中一个长期弃用且目前已删除的方法调用,该脚本在撰写本文时仍然存在,如果已修复则不会有任何改变

$ sed -i.original 's/File.exists?/File.exist?/' script/import_scripts/mybb.rb

现在检查 Redis 是否仍在运行。Rails 安装脚本会启动它,但不会将其启用为永久服务,因此它不会在重启、崩溃等情况下保留。

$ ps -aux |grep redis
silverdr    2808  0.3  0.3  89972 14512 ?        Ssl  05:25   2:04 redis-server *:6379
[… ]

如果看不到类似上面的行,请运行

$ redis-server --daemonize yes

这与上面 Rails 安装脚本第一次安装时使用的命令相同。

最后 :pray:

$ IMPORT=1 bundle exec ruby script/import_scripts/mybb.rb

如果此时脚本没有因 YAE(又一个错误)而停止,那么就是时候打开那瓶酒了 :champagne:

剩下的一些事情

  • 好的 - 显而易见缺失的部分是用户的密码。显然,即使两个应用程序都存储了哈希和盐,但从这些哈希的长度来看,“mybb”使用了较旧的哈希算法。因此,这是可以理解的,也不是一个阻碍。每个人第一次都应该能够重置她的密码。
  • 一些 bbcode 内容未被转换。例如,我在处理代码块时遇到了问题,这些代码块周围有一些标签设置了等宽的 Courier 字体和其他东西。我没有精力再尝试自动化这个东西了。如果您设法对此做些什么,请告知我们!:man_bowing:
2 个赞