Hola, estoy intentando importar un antiguo foro phpBB2 a Discourse.\n\nHice la importación preliminar de phpBB2 a phpBB3, como se indica en vuestra documentación.\n\nTuve problemas con la importación de avatares (no se importaron) y con las contraseñas. Seguramente Discourse utiliza un método de encriptación diferente al de phpBB2, así que estaba pensando en escribir algo de código que, al primer inicio de sesión, compruebe si las contraseñas están encriptadas al estilo phpBB2, compruebe si con la encriptación de phpBB2 (¿md5?) la contraseña coincide con el hash guardado y luego la reescriba con la encriptación de Discourse.\n\nNormalmente, con los “viejos y buenos” PHP y MySQL, es un trabajo de media hora, pero con Discourse ni siquiera sé por dónde empezar a modificar el código fuente. Mi antiguo phpBB2 estaba muy modificado (por esa razón nunca lo actualicé a phpBB3), pero sé que no es un buen hábito y no quiero estropear Discourse y perder su automatismo de actualización, así que pregunto cómo podría gestionar mi necesidad. ¿Debería desarrollar un plugin? ¿Hay alguna posibilidad de tener esta función en una nueva versión “beta”?\n\nGracias
Para importar contraseñas, necesitas el plugin Soporte para hashes de contraseñas migrados. Esto podría resolver tu problema de contraseñas.
Es difícil decir si tu problema con el avatar se debe a que tus datos no son compatibles o si simplemente no configuraste el script correctamente.
Gracias por tu pista, lo intentaré lo antes posible. Con respecto a los avatares, volví a comprobar cada paso según tu guía, pero sin éxito. Sin embargo, como tendré que repetir la importación, intentaré observar cada paso y te informaré.
No soy el propietario de este tema, pero me gustaría conectarme ya que estoy en un viaje similar.
Actualmente estoy jugando con import_phpbb3 y ya estoy enfrentando algunos desafíos al crear los usuarios. Me gustaría migrar también el avatar del usuario, pero parece que no funciona para todos los usuarios. Para algunos, estoy obteniendo el siguiente problema:
Failed to upload avatar for user myuser: /shared/import/data/images/avatars/upload/phpbb_avatar_2.png
#<ActiveModel::Errors:0x00000055a4b3de78 @base=#<Upload id: nil, user_id: nil, original_filename: "avatar.png", filesize: 0, width: nil, height: nil, url: nil, created_at: nil, updated_at: nil, sha1: nil, origin: nil, retain_hours: nil, extension: nil, thumbnail_width: nil, thumbnail_height: nil, etag: nil, secure: false, access_control_post_id: nil, original_sha1: nil, animated: nil, verification_status: 1, security_last_changed_at: nil, security_last_changed_reason: nil>, @errors=[#<ActiveModel::Error attribute=base, type=Sorry, the image you are trying to upload is too large (maximum dimension is 80-megapixels), please resize it and try again., options={}>]>
El problema parece ser el formato de archivo png. ¿Hay alguna forma de importar también archivos png o necesitan ser gif/jpg? oxipng ya está instalado.
root@DietPi4-import:/var/www/discourse# which oxipng
/usr/local/bin/oxipng
root@DietPi4-import:/var/www/discourse#
Con respecto al plugin de contraseña. Lo tengo activado como parte de la construcción del contenedor de importación. ¿O también necesita hacerse en el contenedor de discourse? ¿Hay alguna forma de ver si esto ha funcionado o sería algo que el usuario tendría que probar?
Muchas gracias de antemano.
El plugin migrate password solo debe activarse en el foro después de que se haya realizado la migración, de lo contrario, puede causar errores durante las importaciones de usuarios.
Para ver si está funcionando, simplemente actívalo e intenta iniciar sesión con tu contraseña anterior.
gracias por los comentarios @Canapin
En este caso, reconstruiré el contenedor de producción antes de reiniciarlo, después de que la importación finalice en el contenedor de importación.
Por cierto: ¿puede alguien del equipo de administración revisar mi publicación inicial? Parece que la ajusté demasiado y me marcaron como SPAM ![]()
¿Nadie tiene idea de por qué no funciona la importación de archivos PNG?
Sería útil tener más información. ¿Qué versión de phpBB? ¿Algún mensaje de error?
¿Puedes explicar qué significa “no funciona”?
Ya compartido arriba. Parece que el script de importación no puede leer archivos PNG correctamente, ya que básicamente todos los valores son nil.
Oh, lo siento, no vi que ya habías publicado el problema. No puedo ayudarte con eso, lo siento, no tengo las habilidades adecuadas.
editar: (quizás para evitar mi pequeño “error”, podrías haber respondido a tu propio mensaje para que pudiera haber visto tu primer mensaje)
Veo esto de vez en cuando durante las migraciones y los archivos afectados normalmente no se pueden abrir en un visor de imágenes debido a un formato de archivo desconocido. Siempre asumo que esos archivos se corrompieron a lo largo de los años.
¿Está seguro de que los PNG que intenta importar son archivos de imagen válidos? Si es así, ¿puede compartir un ejemplo? Además, ¿está importando dentro del contenedor de Docker o en un entorno de desarrollo?
TL;DR; Las imágenes se corrompieron al transferirlas a la máquina Linux.
@gerhard Estaba 100% seguro de que mis archivos PNG eran válidos y correctos, ya que podía abrirlos en mi computadora con Windows. Sin embargo, tu pista me llevó en la dirección correcta y verifiqué cómo se veían los archivos PNG en la máquina Linux. Y tenías toda la razón, ya que todos los archivos PNG se dañaron. La causa raíz fue la forma en que los transferí. Usé SCP (WinSCP) y los archivos PNG se transfirieron como archivos de texto, lo que provocó la corrupción. En mi nuevo intento, transferí todo como un archivo 7z y simplemente los extraje directamente en la máquina Linux. Esta vez, la importación funcionó bien.
Agradezco mucho tu apoyo, al haberme indicado la dirección correcta ![]()
Si bien mi importación ahora funciona para el 99,9% de todas las publicaciones, tengo una pregunta más. ¿Hay alguna forma de transferir también el estado de los temas resueltos? En el nuevo foro de producción, planeo usar discourse-solved. Pregunta: ¿cómo transferir el estado anterior al nuevo mundo?
Nuevamente: Agradezco mucho tu apoyo.
No conozco un estado de “resuelto” en phpBB. ¿Es una extensión/mod? Supongo que necesitarás personalizar el script de importación para poder importarlo.
Eché un vistazo a la base de datos de phpbb y ahora sé el campo que almacena información sobre si un tema/publicación está resuelto. Solo necesito averiguar cómo y dónde almacenarlo en la base de datos de Discourse. ![]()
Puedes mirar otros scripts de importación que lo soporten (busca “solved”, creo). Necesitarás tener el plugin instalado en tu instancia de importación.
Gracias por tu respuesta, pero eso parece ir más allá de mis habilidades.
En la base de datos phpbb de origen, el ID de la publicación que resuelve un tema se almacena en
phpbb_topics.topic_solved.
En Discourse, la información se almacena en 3 campos diferentes (si no me equivoco)
post_custom_fields.is_accepted_answertopic_custom_fields.accepted_answer_post_idtopic_custom_fields.solved_auto_close_topic_timer_id
Por lo que he entendido, se realiza algún tipo de mapeo durante la importación, ya que los ID de topic + post van a cambiar.
Pero ahí termina mi conocimiento.
Entonces, explicar cómo modificarlo y depurarlo probablemente esté más allá de lo que se puede lograr aquí. Si tienes presupuesto, puedes publicar en Marketplace o contactarme.
Se almacena en un campo personalizado llamado “import_id” y hay funciones que puedes usar para hacer búsquedas que puedes ver en el código. Algo como topic_id_from_import_id()
Gracias por la oferta. Somos un proyecto de código abierto muy pequeño sin presupuesto real. Al principio, no era consciente de que la función “tema resuelto” es una extensión no estándar en phpbb (me uní al foro años después de su creación) y pensé que podría ser fácil de arreglar. Pero entendí que es una solicitud individual, que lleva tiempo examinar.
Nuevamente, gracias a ustedes que ayudaron a que funcione casi a la perfección.
Ah, por cierto, chicos, phpbb ha sido migrado desde una versión 3.3.5. Ha estado funcionando bien, aunque no tenga soporte.
Si pudieras averiguar qué tablas están involucradas en el discurso, podrías copiar unas pocas líneas de código de otro importador.
Ya veo. Está mapeando los ID de publicaciones/temas de phpbb con los ID de publicaciones/temas de Discourse.
Este parece ser un buen ejemplo para importar respuestas aceptadas discourse/script/import_scripts/lithium.rb at 44f7a61c2c5b6f248a62ab7f987ebbd3091c71ef · discourse/discourse · GitHub
Pero si entendí correctamente, como primer paso necesitaría almacenar/importar el valor de phpbb_topics.topic_solved en postgres. ¿verdad?