Migrando um fórum myBB para Discourse usando Kubuntu em uma VM

Resumindo a jornada (muito mais longa que este post) :wink: :

NOTA: Usei uma distribuição Kubuntu rodando em máquina virtual para o processo, então, por favor, tenha em mente que pode não ser o mesmo em sistemas operacionais ou até mesmo distribuições diferentes.

0. Instalando o ambiente de desenvolvimento do Discourse

Seguindo este post e executando este script vinculado no post usando

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

conforme descrito lá, mais clonando as fontes

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

1. Preparando o banco de dados MySQL

Obtenha um dump do banco de dados mybb original conforme descrito no topo do thread:

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

e copie/mova-o para o ambiente de desenvolvimento recém-configurado.

Instale o servidor MySQL

$ sudo apt-get install mysql-server

A autenticação para o mysql mudou em versões mais recentes. Você tem que ser root no host se quiser ser root no mysql atualmente, então

$ sudo mysql

em vez de

$mysql -u root

Claro, você tem que ser um “sudoer” (administrador) primeiro

$ 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
 
<aqui você recebe um aviso sobre fornecer a senha na linha de comando não ser uma coisa inteligente a fazer>
 
$ sudo mysql
mysql> USE mybb;
mysql> SHOW TABLES;
 
<aqui verifique se todas as tabelas estão presentes - veja o post original>
 
mysql> quit

2. Instalar gems do Ruby

Verificando o Gemfile nas fontes atuais revela que

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

não é realmente necessário. É suficiente definir a variável de ambiente IMPORT como 1.
O que é necessário, no entanto, são os arquivos de desenvolvimento para clientes MySQL, que é o que a primeira linha abaixo trata

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

2. Preparar o Discourse (banco de dados 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. Executar a importação real

A próxima linha corrige uma chamada de método muito obsoleta e atualmente já removida no script de importação mybb.rb, que ainda está lá no momento da escrita e não mudará nada se isso já foi corrigido

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

Agora verifique se o Redis ainda está em execução. O script de instalação do Rails o inicia, mas não o habilita como um serviço permanente, então ele não sobrevive a reinicializações, falhas, o que for, etc.

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

Se você não vir nada como a linha acima, execute

$ redis-server --daemonize yes

que é exatamente o mesmo comando que o script de instalação do Rails acima usou na primeira vez ao instalar.

Finalmente :pray: e

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

Se neste momento o script não parou com YAE (Yet Another Error - Mais Um Erro), então é hora de abrir aquela garrafa :champagne:

Algumas coisas permanecem

  • OK - então a única parte óbvia que falta são as senhas dos usuários. Aparentemente, mesmo que ambos os aplicativos armazenem hash e salt, a julgar pelo comprimento desses hashes, “mybb” usa um algoritmo de hash mais antigo. Portanto, isso é compreensível e não um impedimento. Todos deveriam ser capazes de redefinir sua senha na primeira vez.
  • Algumas coisas de bbcode não são convertidas. Eu tenho, por exemplo, problemas com blocos de código, que têm algumas tags ao redor deles definindo a fonte monospaced Courier e o que mais. Não tenho mais energia para tentar automatizar mais essa coisa. Se você conseguir fazer algo a respeito, por favor, me/nos informe aqui! :man_bowing:
2 curtidas