Migrando un foro myBB a Discourse usando Kubuntu en una VM

Resumiendo el viaje (¡mucho más largo que esta publicación! :wink: ):

NOTA: Utilicé una distribución de Kubuntu que se ejecuta en una máquina virtual para el proceso, así que ten en cuenta que puede no ser lo mismo en diferentes sistemas operativos o incluso distribuciones.

0. Instalación del entorno de desarrollo de Discourse

Siguiendo esta publicación y ejecutando este script enlazado en la publicación usando

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

como se describe allí, además de clonar las fuentes

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

1. Preparación de la base de datos MySQL

Obtén un volcado de la base de datos mybb original como se describe en la parte superior del hilo:

$ mysqldump -u NOMBRE_USUARIO -p NOMBRE_BASE_DATOS > mybb_dump.sql

y cópialo/muévelo al nuevo entorno de desarrollo configurado.

Instala el servidor MySQL

$ sudo apt-get install mysql-server

La autenticación para mysql ha cambiado en versiones más recientes. Tienes que ser root en el host si quieres ser root en mysql en estos días, así que

$ sudo mysql

en lugar de

$mysql -u root

Por supuesto, primero tienes que ser un “sudoer” (administrador)

$ 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

<aquí obtienes una advertencia sobre que proporcionar la contraseña en la línea de comandos no es algo inteligente de hacer>

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

<aquí verifica si todas las tablas están presentes - ver la publicación original>

mysql> quit

2. Instalar gemas de Ruby

Al verificar el Gemfile en las fuentes actuales, se revela que

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

no es realmente necesario. Es suficiente establecer la variable de entorno IMPORT a 1.
Lo que sí se necesita son los archivos de desarrollo para los clientes de MySQL, que es para lo que sirve la primera línea a continuación.

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

2. Preparar Discourse (base de datos 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. Ejecutar la importación real

La siguiente línea corrige una llamada a método muy obsoleta y actualmente ya eliminada en el script de importación mybb.rb, que todavía está allí en el momento de escribir esto y no cambiará nada si ya está corregido.

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

Ahora comprueba si Redis todavía se está ejecutando. El script de instalación de Rails lo inicia pero no lo habilita como un servicio permanente, por lo que no sobrevive a reinicios, fallos, etc.

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

Si no ves nada parecido a la línea anterior, ejecuta

$ redis-server --daemonize yes

que es exactamente el mismo comando que utilizó el script de instalación de Rails la primera vez al instalar.

Finalmente :pray: y

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

Si en este momento el script no se detuvo con YAE (Yet Another Error - Otro Error Más), entonces es hora de descorchar esa botella :champagne:

Quedan algunas cosas

  • OK - así que la única parte obvia que falta son las contraseñas de los usuarios. Aparentemente, aunque ambas aplicaciones almacenan hash y sal, a juzgar por la longitud de esos hashes, “mybb” utiliza un algoritmo de hash más antiguo. Por lo tanto, esto es comprensible y no es un impedimento. Todos deberían poder restablecer su contraseña la primera vez.
  • Algunas cosas de bbcode no se convierten. Por ejemplo, tengo problemas con los bloques de código, que tienen algunas etiquetas alrededor que establecen la fuente monoespaciada Courier y otras cosas. Ya no tengo fuerzas para intentar automatizar esto más. Si logras hacer algo al respecto, ¡por favor házmelo saber a mí / a nosotros aquí! :man_bowing:
2 Me gusta