Migrando un foro myBB a Discourse usando Kubuntu en una VM

Después de pasar demasiadas horas, pensé que estaba cerca, pero entonces…

$ bundle exec ruby script/import_scripts/mybb.rb 
Cargando grupos existentes...
Cargando usuarios existentes...
Cargando categorías existentes...
Cargando publicaciones existentes...
Cargando temas existentes...

creando usuarios
script/import_scripts/mybb.rb:96:in `block (3 levels) in import_users': undefined method `exists?' for File:Class (NoMethodError)

                  @uploader.create_avatar(newuser, filename) if File.exists?(filename)
                                                                    ^^^^^^^
Did you mean?  exist?

todavía no hay suerte :frowning:

1 me gusta

Si entiendo bien, el método fue obsoleto y luego eliminado de las versiones actuales de Ruby:

El script de importación debe actualizarse para reflejar este cambio.


Quizás intente reemplazar exists con exist sin la “s” aquí:

:slight_smile:

Documentación de Ruby: https://ruby-doc.org/3.2.2/File.html#method-c-exist-3F

1 me gusta

Sí, ha estado obsoleto durante mucho tiempo antes de eso. Intentaré buscar las ocurrencias relevantes y cambiarlas, pero necesito tomar un descanso de este ejercicio largo y hasta ahora no muy gratificante :wink:

Bueno…

$ bundle exec ruby script/import_scripts/mybb.rb
Cargando grupos existentes...
Cargando usuarios existentes...
Cargando categorías existentes...
Cargando publicaciones existentes...
Cargando temas existentes...
/home/silverdr/sources/discourse/lib/site_setting_extension.rb:444:in `get': No setting named 'email_domains_blacklist' exists (Discourse::InvalidParameters)

Puedes encontrar el nuevo nombre en la configuración del sitio. Creo que es email_domains_blocklist.

Gracias.

$ grep -R email_domains_blocklist ./\n```
no devuelve nada

$ grep -R email_domains_blacklist ./\n./script/import_scripts/base.rb: email_domains_blacklist: ‘’,\n./app/models/site_setting.rb: email_domains_blacklist: "blocked_email_domains",\n```
devuelve lo anterior. Significa que lo más probable es que sea blocked_email_domains. Por otro lado, noté que en intentos anteriores reemplacé el script/import_scripts/base.rb original con el basado en gist enlazado arriba por @Paul_King:

Restauré el original y parece que esta vez ha funcionado. Demasiado bueno para ser verdad. Yo/El debe haberse perdido algo :wink: Voy a averiguarlo ahora.

2 Me gusta

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

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.