¿Es posible importar foros de phpBB a un foro de Discourse existente, es decir, fusionarlos? Supongo que se basa en la configuración sobre el mapeo de categorías.
¿Hay algún problema a tener en cuenta?
¿Se fusionan los usuarios si tienen la misma dirección de correo electrónico?
sí. si no haces tu propio mapeo de categorías en el archivo de configuración, se crearán nuevas categorías según sea necesario durante la importación. si ya existe una categoría en Discourse que coincide con un nombre de categoría de phpbb, las categorías se fusionarán.
oh, sí. aquí hay un hilo que detalla lo que he encontrado. tengo algunos consejos y también un repositorio con mis actualizaciones combinadas del importador.
no recuerdo las condiciones exactas, pero sí, los usuarios se fusionan automáticamente durante la importación.
Tengo curiosidad por saber si es posible fusionar un foro phpbb3 en Discourse manteniendo todos los temas importados de solo lectura. Busqué en el hilo, pero no vi que esto se mencionara. Gracias.
Podrías modificar el script de importación para archivar todos los temas creados, o podría ser más fácil hacerlo en bloque después de que el script se ejecute. Consulta Administrative Bulk Operations para ver ejemplos.
Parece que estoy encontrando un problema al iniciar el importador. Parece ocurrir durante la importación de usuarios o poco después. He incluido el rastreo de la pila y un video rápido de 20 segundos de la salida.
Por favor, aconséjame.
0x00007fe87a88bb10 /var/www/discourse/script/import_scripts/phpbb3/importers/user_importer.rb:87>}
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.7/lib/active_record/validations.rb:80:in `raise_validation_error': Validation failed: Name can't be blank (ActiveRecord::RecordInvalid)
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.7/lib/active_record/validations.rb:53:in `save!'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.7/lib/active_record/transactions.rb:302:in `block in save!'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.7/lib/active_record/transactions.rb:354:in `block in with_transaction_returning_status'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.7/lib/active_record/connection_adapters/abstract/database_statements.rb:314:in `transaction'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.7/lib/active_record/transactions.rb:350:in `with_transaction_returning_status'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.7/lib/active_record/transactions.rb:302:in `save!'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.7/lib/active_record/suppressor.rb:54:in `save!'
from /var/www/discourse/script/import_scripts/base.rb:361:in `block in create_user'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.7/lib/active_record/connection_adapters/abstract/transaction.rb:319:in `block in within_new_transaction'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.7/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.7/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.7/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.7/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.7/lib/active_record/connection_adapters/abstract/transaction.rb:317:in `within_new_transaction'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.7/lib/active_record/connection_adapters/abstract/database_statements.rb:316:in `transaction'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.7/lib/active_record/transactions.rb:209:in `transaction'
from /var/www/discourse/script/import_scripts/base.rb:360:in `create_user'
from /var/www/discourse/script/import_scripts/base.rb:278:in `block in create_users'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rack-mini-profiler-3.1.1/lib/patches/db/mysql2/alias_method.rb:8:in `each'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rack-mini-profiler-3.1.1/lib/patches/db/mysql2/alias_method.rb:8:in `each'
from /var/www/discourse/script/import_scripts/base.rb:266:in `create_users'
from /var/www/discourse/script/import_scripts/phpbb3/importer.rb:106:in `block in import_anonymous_users'
from /var/www/discourse/script/import_scripts/base.rb:948:in `block in batches'
from /var/www/discourse/script/import_scripts/base.rb:947:in `loop'
from /var/www/discourse/script/import_scripts/base.rb:947:in `batches'
from /var/www/discourse/script/import_scripts/phpbb3/importer.rb:293:in `batches'
from /var/www/discourse/script/import_scripts/phpbb3/importer.rb:102:in `import_anonymous_users'
from /var/www/discourse/script/import_scripts/phpbb3/importer.rb:33:in `execute'
from /var/www/discourse/script/import_scripts/base.rb:47:in `perform'
from /var/www/discourse/script/import_scripts/phpbb3/importer.rb:22:in `perform'
from script/import_scripts/phpbb3.rb:35:in `<module:PhpBB3>'
from script/import_scripts/phpbb3.rb:16:in `<module:ImportScripts>'
from script/import_scripts/phpbb3.rb:15:in `<main>'
EDIT:
Parece que tiene algo que ver con los usuarios anónimos, creo que voy a revisar mi base de datos.
EDIT
Logré que pasara el error cambiando esta línea en el método map_anonymous_user. Resulta que el valor predeterminado era establecer el nombre de usuario como una cadena vacía, así que simplemente le puse una palabra.
¿Puedo eliminar publicaciones antiguas antes de ejecutar una importación incremental? Ejecuté la importación con éxito localmente en una instalación de desarrollo, la restauré en mi servidor con una instalación de Docker y mi plan es ejecutar una importación allí para las nuevas publicaciones. Pero incluso ignorando las publicaciones que ya se han importado, ejecutar la importación en el servidor lleva horas. Mi foro es bastante grande (1,3 millones de publicaciones) y el disco de mi servidor es lento, por lo que solo cargar el archivo .sql lleva horas.
¿Causará problemas si hago algo como DELETE FROM phpbb_posts WHERE post_id < 2926807 localmente y luego lo volco y lo subo al servidor y ejecuto la importación de forma normal?
Agregué una configuración IMPORT_AFTER a algunos scripts para que solo extraigan datos después de una fecha determinada. Así que modificaría el SQL que extrae las publicaciones para obtener solo las posteriores a un día antes del último volcado de datos.
Pero si tienes un disco muy lento, es probable que tengas problemas para alojar Discourse. ¿Es aceptable el rendimiento con los datos que tienes?
Sí, para uso normal usaré un disco más rápido, pero no es lo suficientemente grande para alojar varias copias de la base de datos al mismo tiempo, así que estoy redirigiendo /shared/import a un disco más grande y lento en la sección de volúmenes de import.yml. El truco funcionó bien para restaurar la copia de seguridad inicial, redirigí /shared/tmp al disco lento después de que la restauración fallara por quedarse sin espacio, aunque tenía 18G libres y una base de datos de 6G (creo que te vi mencionar en otro lugar que la restauración crea 3 copias de la base de datos mientras se ejecuta). Pero en esa etapa, el tiempo de inactividad no era una preocupación.
Así que, día a día, el tamaño y la velocidad no son un problema, mi foro es bastante tranquilo, solo es antiguo.
Echaré un vistazo a modificar el SQL en los scripts. ¡Gracias!
El nombre de la base de datos debe ir en el parámetro schema. El nombre de ese parámetro es un poco confuso, sí. Puedes ver aquí en el código, se pasa como el nombre de la base de datos.
Hola. ¿Hay alguna forma de ejecutar la importación fila por fila? Estamos teniendo problemas para que el script se complete. Algunas cosas funcionan, como los usuarios y los avatares, otras no. He reinstalado mi servidor unas 4 veces porque leí en alguna parte que después de que una importación falla, se necesita una instalación limpia.
Otros detalles están en el video que publiqué. Cualquier ayuda es apreciada.
Hola. Llevo unas 18 horas migrando y no estoy más cerca de conseguir que la migración funcione. ¿Podrías ver mi vídeo y aconsejarme si tienes algún consejo o truco o si falta algo en la configuración? Solo necesitamos publicaciones, temas, mensajes privados, categorías. Los avatares y los usuarios funcionan. El servidor está limpio UBUNTU 22.04.
Una solución más fácil es hacer una copia de seguridad después de crear el sitio para poder restaurarla. Otra forma de obtener una base de datos limpia es ejecutar rake db:drop db:create db:migrate, pero tienes que hacer algunas cosas para que eso sea posible. Si no puedes adivinar esas cosas por los mensajes de error, entonces la solución de copia de seguridad/restauración es el camino a seguir, y puede que sea más rápida de todos modos.
Puedes añadir algunas sentencias puts de depuración, aunque la estructura del script phpbb3 es un poco confusa para las personas que no conocen bien Ruby.
Además, puedes ejecutar el script varias veces y omitirá las cosas que ya ha hecho, por lo que no necesitas borrar la base de datos hasta que hayas cambiado algo que requiera un nuevo comienzo (es decir, hará algo diferente con los datos ya importados).
Eso va más allá de lo que puedo hacer gratis. Si tienes presupuesto, puedes contactarme directamente o publicar en Marketplace.
El script de importación no parece estar funcionando. El problema está en el video. Si alguien de migraciones de Discourse pudiera investigarlo, se agradecería.
Si el soporte tiene costo, ¿podrían enumerar el costo de la migración? Entiendo que aquí es donde preguntamos cómo hacer que el script funcione. Estoy de acuerdo con las tarifas, solo pensé que este era un proyecto de código abierto y que este era el lugar al que acudir para hacer preguntas.
Digo que soy voluntario aquí y no estoy dispuesto a ver un video gratis, en gran parte debido a mi desdén irracional por los videos. Pero no soy el único aquí. A mucha gente le encanta ver videos.
¿Entonces cada vez que se ejecuta crea duplicados de los usuarios que creó en la ejecución anterior? No puedo imaginar cómo podría ser eso. ¿Estás seguro? No se supone que funcione así.
Parecerá que importa las cosas de nuevo, pero va mucho más rápido ya que en realidad no está haciendo nada, ya que las cosas que ya se han importado tienen un campo personalizado import_id configurado que evita que se importen de nuevo. Si está duplicando datos en cada ejecución, entonces algo muy extraño está mal.
Lo es. A veces, las personas necesitan o quieren más ayuda de la que se puede obtener gratis.
Entendido. ¿Podría publicar sus tarifas de migración? Entiendo que el script no parece funcionar y requiere soporte de pago. Estoy totalmente de acuerdo con eso.
Las migraciones son bastante complejas. Cada una de ellas tiene desafíos diferentes, ya que los datos de cada foro son únicos. Depurar un problema de migración puede llevar horas y requiere una mirada en profundidad a los registros, la base de datos, el código, etc. Es difícil hacerlo solo mirando estas publicaciones, ¡lamento no poder ser de más ayuda! Aquí está nuestra sección de preguntas frecuentes sobre migraciones: Migrating to Discourse | Discourse - Civilized Discussion
Gracias por el enlace. Creo que he resuelto el problema y el script de importación se está ejecutando. Ahora mismo tengo alrededor de 100000/666357 publicaciones. Chat GPT ha sido útil para identificar algunos de los errores basados en permisos y similares.