总结一下(比这篇帖子长得多
的旅程:
注意:我在此过程中使用了虚拟机中运行的 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 安装脚本第一次安装时使用的命令相同。
最后
和
$ IMPORT=1 bundle exec ruby script/import_scripts/mybb.rb
如果此时脚本没有因 YAE(又一个错误)而停止,那么就是时候打开那瓶酒了 ![]()
剩下的一些事情
- 好的 - 显而易见缺失的部分是用户的密码。显然,即使两个应用程序都存储了哈希和盐,但从这些哈希的长度来看,“mybb”使用了较旧的哈希算法。因此,这是可以理解的,也不是一个阻碍。每个人第一次都应该能够重置她的密码。
- 一些 bbcode 内容未被转换。例如,我在处理代码块时遇到了问题,这些代码块周围有一些标签设置了等宽的 Courier 字体和其他东西。我没有精力再尝试自动化这个东西了。如果您设法对此做些什么,请告知我们!
