Migrar un foro phpBB3 a Discourse

Markdown también debería funcionar, pero supongo que usar <strong> podría solucionar incluso más casos extremos. Ten en cuenta que mezclar HTML y Markdown también tiene sus trucos… Aquí tienes una solución simple de Markdown:

**texto\\\n\\\nmultilínea**

Tengo curiosidad, ¿desde qué versión de phpBB estás importando? La conversión de BBCode a Markdown es mucho mejor para la 3.2 que para versiones anteriores. Idealmente, ya no deberías ver [b] en las publicaciones importadas.

2 Me gusta

Supongo que tienes razón, no sé por qué no lo pensé primero…

Estoy migrando desde phpBB 3.0.7-PL1.

2 Me gusta

Te harás un gran favor si actualizas a la versión 3.2 antes de la importación. :wink:

Asegúrate de que los BBCodes de todas las publicaciones se migren al nuevo formato de almacenamiento ejecutando el reparador de phpBB: https://www.phpbb.com/support/docs/en/3.3/kb/article/phpbb-32%2B-text-reparser/

3 Me gusta

Lo pensé al principio, pero… odio las cosas de informática :sweat_smile:
No conozco muy bien phpBB y no quería tener que lidiar con ningún error que pudiera ocurrir durante una actualización desde una versión tan antigua.

Dado que el script de migración de Discourse es compatible con phpBB 3.0, elegí no actualizar phpBB…
Quizás algunos problemas de bbcode que encontré se habrían evitado con una actualización de phpBB. Cosas como listas anidadas, [b] con saltos de línea, etc…:man_shrugging:

Pero como empecé a trabajar en la importación en diciembre, estoy cerca de tener una importación que funcione bien (idealmente, el nuevo foro estaría en línea en unas dos semanas…) y no estoy seguro de querer experimentar ahora una actualización de phpBB, especialmente si tengo que revisar todas las correcciones de importación personalizadas que he hecho para ver si el importador de phpBB 3.2 maneja estas cosas mejor :sweat_smile:. Sería un proceso largo.

Dicho esto… ¡podría experimentar con cosas este fin de semana tarde si estoy lo suficientemente aburrido!


edición: Lo intenté; mudarse a un nuevo servidor y luego actualizar a pbpBB 3.2 es un lío. Problemas de HTTPS. Problemas de caché. Otros problemas. Procedimientos complicados y frustrantes. El tutorial oficial aconseja usar herramientas que requieren una versión obsoleta de PHP (¡hola, PHP 5, mucho tiempo sin verte…!). Aparentemente, a veces me aburro pero no me vuelvo loco, al menos no lo suficiente como para hacer este tipo de cosas.

¡Gerhard! ¡Estás engañando! ¡Actualizar a la versión 3.2 no es un gran favor! :laughing:

Pero basta de hablar de phpBB en sí… Y alaben la actualización de un clic de Discourse.

1 me gusta

Hola,

Estoy intentando migrar usuarios de WordPress a Discourse. Pude seguir las instrucciones para conectarme a nuestra base de datos de WP e importar usuarios en el contenedor de Docker. Quería asegurarme de que no se enviarán correos electrónicos durante o después de la migración porque estamos utilizando el plugin SSO de WordPress.

Prefijé los correos electrónicos con “import_” para que no los reciban en caso de que haya tareas en segundo plano que envíen confirmación por correo electrónico después de que se complete la migración.

Veo que hay una columna last_emailed_at establecida después de la migración:

Sé que se establece mediante opts[:last_emailed_at] = opts.fetch(:last_emailed_at, Time.now) en ImportScripts::Base::create_user().

¿Existe una función similar a admin.email_tokens.update_all(confirmed: true) utilizada en ImportScripts::Base::create_admin donde se confirma el correo electrónico?

No veo ningún registro que muestre los correos electrónicos enviados. ¿Se enviaron realmente correos electrónicos? ¿Intentará Discourse enviar correos electrónicos después de que cambie los correos electrónicos a válidos?

1 me gusta

Esto está fuera de tema, ya que este tema trata sobre la migración de phpBB3… :wink:

Recomiendo usar un dominio .invalid si quieres asegurarte de que algunos usuarios nunca recibirán correos electrónicos (por ejemplo, foo@mywpimport.invalid). Pero, si solo quieres deshabilitar los correos electrónicos salientes hasta que estés listo, ¡establecer la configuración del sitio disable_emails en “yes” o “non-staff” es tu mejor opción!

Los correos electrónicos salientes se deshabilitan automáticamente durante una importación. Los valores del atributo last_emailed_at probablemente provienen de Discourse intentando enviar un correo electrónico, antes de descubrir que no tiene permiso para hacerlo.

Discourse definitivamente intentará enviar correos electrónicos después de la migración.

2 Me gusta

Gracias, primero probé con una cadena vacía para el campo de correo electrónico y la clase base ImportScript generó correos electrónicos falsos con el dominio no válido. También tienen el atributo last_emailed_at establecido.

Entonces, ¿lo que dices es que tan pronto como corrija el correo electrónico de la base de datos, Discourse intentará enviar el correo electrónico? Pero un inicio de sesión normal autenticado por WordPress no requiere confirmación por correo electrónico. ¿No hay forma de evitar eso con el ImportScript?

1 me gusta

Mi migración está hecha y es exitosa.
Sin embargo, me enfrento a dos problemas. Hazme saber si está fuera de tema.

  1. Algunos contenidos de las publicaciones tienen este tipo de contenido:

    [url=https://www.casimages.com/i/1907271141431956116331631.jpg.html][ 
    [img]https://nsm09.casimages.com/img/2019/07/27//1907271141431956116331631.jpg[/img][/url]
    

    Las imágenes se muestran en la vista previa, pero están rotas en la publicación en sí, incluso después de reconstruir el HTML:

    El HTML generado para cada imagen es:

    <p><a href="https://www.casimages.com/i/1907271151181956116331666.jpg.html" data-bbcode="true"><span alt="" class="broken-image" title="Esta imagen está rota"><svg class="fa d-icon d-icon-unlink svg-icon" aria-hidden="true"><use href="#unlink"></use></svg></span></a></p>
    

    Encuentro este problema en muchas publicaciones. ¿Tienes alguna idea para solucionarlo de forma global?

  2. Como muchos foros antiguos, los enlaces antiguos de Imageshack han estado rotos durante mucho tiempo, y para siempre. Pero algunos enlaces ahora muestran una bandera de Ucrania en lugar de nada:

    ¿Cómo manejarías este comportamiento?
    Estoy abierto a cualquier idea, pero un administrador del foro tiene una copia estática de todo el foro en un disco duro antiguo, donde la mayoría de las imágenes antiguas son válidas (ya que se descargaron y almacenaron localmente). Estoy pensando que en el futuro podría crear un script que reemplace todos los enlaces “muertos” de Imageshack por las imágenes válidas de la versión estática. Parece muy complicado de hacer, pero por esta razón, no estoy seguro de querer simplemente eliminar todos los enlaces de Imageshack del foro reemplazándolos con una cadena vacía o algo así.

1 me gusta

¿Es el salto de línea lo que está causando el problema? Esa sería mi suposición. Necesitarás reasignar esos BBCodes para eliminar el salto de línea. Replace a string in all posts debería ser útil.

¿Quizás convertirlos en comentarios HTML por ahora? Más tarde podrías reemplazarlos con las imágenes almacenadas.

2 Me gusta

No parece ser ese el problema:
Añadí saltos de línea para que el contenido se vea así:

[url=https://www.casimages.com/i/1907271141431956116331631.jpg.html]

[img]https://nsm09.casimages.com/img/2019/07/27//1907271141431956116331631.jpg[/img]

[/url]

Y el resultado:

Ejemplos de publicaciones:

¡Sí, es una buena idea! :+1: Entonces, básicamente, ¿reemplazar las cadenas (del tema que enlazaste) usando expresiones regulares para apuntar solo a los enlaces de Imageshack?

2 Me gusta

Así que, este no es el problema después de experimentar con nuevas líneas.

Pero si copio y pego el contenido de la publicación en una nueva publicación en el mismo foro, el contenido se muestra correctamente :woozy_face: :question: :


(y también las imágenes enlazadas se descargan localmente con éxito)

Vs:

Intenté volver a hornear la publicación con las imágenes rotas (que se muestran correctamente en la vista previa del mensaje, ver mi publicación anterior) pero no arregló nada.

Hasta donde sé, el contenido sin procesar de ambas publicaciones es exactamente el mismo.

Pero el contenido cocinado de la primera publicación (segunda línea) conduce a imágenes rotas:

Estoy perplejo.

1 me gusta

Odd thing:
If I try to rebuild the HTML of any post, I got an error 500:

Logs show a fatal error and a warning:

Screenshot of the log window:

Fatal error:

ArgumentError (wrong number of arguments (given 0, expected 1)) lib/guardian/ensure_magic.rb:11:in 'method_missing' app/controllers/posts_controller.rb:570:in 'rebake' app/controllers/application_cont

plugins/discourse-chat/lib/guardian_extensions.rb:71:in `can_rebake?'
lib/guardian/ensure_magic.rb:11:in `method_missing'
app/controllers/posts_controller.rb:570:in `rebake'
actionpack (6.1.4.1) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
actionpack (6.1.4.1) lib/abstract_controller/base.rb:228:in `process_action'
actionpack (6.1.4.1) lib/action_controller/metal/rendering.rb:30:in `process_action'
actionpack (6.1.4.1) lib/abstract_controller/callbacks.rb:42:in `block in process_action'
activesupport (6.1.4.1) lib/active_support/callbacks.rb:117:in `block in run_callbacks'
app/controllers/application_controller.rb:397:in `block in with_resolved_locale'
i18n (1.10.0) lib/i18n.rb:328:in `with_locale'
app/controllers/application_controller.rb:397:in `with_resolved_locale'
activesupport (6.1.4.1) lib/active_support/callbacks.rb:126:in `block in run_callbacks'
activesupport (6.1.4.1) lib/active_support/callbacks.rb:137:in `run_callbacks'
actionpack (6.1.4.1) lib/abstract_controller/callbacks.rb:41:in `process_action'
actionpack (6.1.4.1) lib/action_controller/metal/rescue.rb:22:in `process_action'
actionpack (6.1.4.1) lib/action_controller/metal/instrumentation.rb:34:in `block in process_action'
activesupport (6.1.4.1) lib/active_support/notifications.rb:203:in `block in instrument'
activesupport (6.1.4.1) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport (6.1.4.1) lib/active_support/notifications.rb:203:in `instrument'
actionpack (6.1.4.1) lib/action_controller/metal/instrumentation.rb:33:in `process_action'
actionpack (6.1.4.1) lib/action_controller/metal/params_wrapper.rb:249:in `process_action'
activerecord (6.1.4.1) lib/active_record/railties/controller_runtime.rb:27:in `process_action'
actionpack (6.1.4.1) lib/abstract_controller/base.rb:165:in `process'
actionview (6.1.4.1) lib/action_view/rendering.rb:39:in `process'
rack-mini-profiler (3.0.0) lib/mini_profiler/profiling_methods.rb:85:in `block in profile_method'
actionpack (6.1.4.1) lib/action_controller/metal.rb:190:in `dispatch'
actionpack (6.1.4.1) lib/action_controller/metal.rb:254:in `dispatch'
actionpack (6.1.4.1) lib/action_dispatch/routing/route_set.rb:50:in `dispatch'
actionpack (6.1.4.1) lib/action_dispatch/routing/route_set.rb:33:in `serve'
actionpack (6.1.4.1) lib/action_dispatch/journey/router.rb:50:in `block in serve'
actionpack (6.1.4.1) lib/action_dispatch/journey/router.rb:32:in `each'
actionpack (6.1.4.1) lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack (6.1.4.1) lib/action_dispatch/routing/route_set.rb:842:in `call'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
rack (2.2.3) lib/rack/tempfile_reaper.rb:15:in `call'
rack (2.2.3) lib/rack/conditional_get.rb:40:in `call'
rack (2.2.3) lib/rack/head.rb:12:in `call'
actionpack (6.1.4.1) lib/action_dispatch/http/permissions_policy.rb:22:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:358:in `call'
rack (2.2.3) lib/rack/session/abstract/id.rb:266:in `context'
rack (2.2.3) lib/rack/session/abstract/id.rb:260:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/cookies.rb:689:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
activesupport (6.1.4.1) lib/active_support/callbacks.rb:98:in `run_callbacks'
actionpack (6.1.4.1) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/actionable_exceptions.rb:18:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/debug_exceptions.rb:29:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
logster (2.10.1) lib/logster/middleware/reporter.rb:43:in `call'
railties (6.1.4.1) lib/rails/rack/logger.rb:37:in `call_app'
railties (6.1.4.1) lib/rails/rack/logger.rb:28:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/request_id.rb:26:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
rack (2.2.3) lib/rack/method_override.rb:24:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/executor.rb:14:in `call'
rack (2.2.3) lib/rack/sendfile.rb:110:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/host_authorization.rb:92:in `call'
rack-mini-profiler (3.0.0) lib/mini_profiler/profiler.rb:249:in `call'
message_bus (4.2.0) lib/message_bus/rack/middleware.rb:60:in `call'
lib/middleware/request_tracker.rb:202:in `call'
railties (6.1.4.1) lib/rails/engine.rb:539:in `call'
railties (6.1.4.1) lib/rails/railtie.rb:207:in `public_send'
railties (6.1.4.1) lib/rails/railtie.rb:207:in `method_missing'
rack (2.2.3) lib/rack/urlmap.rb:74:in `block in call'
rack (2.2.3) lib/rack/urlmap.rb:58:in `each'
rack (2.2.3) lib/rack/urlmap.rb:58:in `call'
unicorn (6.1.0) lib/unicorn/http_server.rb:634:in `process_client'
unicorn (6.1.0) lib/unicorn/http_server.rb:739:in `worker_loop'
unicorn (6.1.0) lib/unicorn/http_server.rb:547:in `spawn_missing_workers'
unicorn (6.1.0) lib/unicorn/http_server.rb:143:in `start'
unicorn (6.1.0) bin/unicorn:128:in `<top (required)>'
vendor/bundle/ruby/2.7.0/bin/unicorn:25:in `load'
vendor/bundle/ruby/2.7.0/bin/unicorn:25:in `<main>'

It was in safe-mode with all theme and plugins disabled, but this code block mentions on the first line:
plugins/discourse-chat/lib/guardian_extensions.rb:71:in 'can_rebake?'

Warning:

Failed to handle exception in exception app middleware : ArgumentError : wrong number of arguments (given 0, expected 1)

/var/www/discourse/plugins/discourse-chat/lib/guardian_extensions.rb:71:in `can_rebake?'
/var/www/discourse/lib/guardian/ensure_magic.rb:11:in `method_missing'
/var/www/discourse/app/controllers/posts_controller.rb:570:in `rebake'
actionpack-6.1.4.1/lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
actionpack-6.1.4.1/lib/abstract_controller/base.rb:228:in `process_action'
actionpack-6.1.4.1/lib/action_controller/metal/rendering.rb:30:in `process_action'
actionpack-6.1.4.1/lib/abstract_controller/callbacks.rb:42:in `block in process_action'
activesupport-6.1.4.1/lib/active_support/callbacks.rb:117:in `block in run_callbacks'
/var/www/discourse/app/controllers/application_controller.rb:397:in `block in with_resolved_locale'
i18n-1.10.0/lib/i18n.rb:328:in `with_locale'
/var/www/discourse/app/controllers/application_controller.rb:397:in `with_resolved_locale'
activesupport-6.1.4.1/lib/active_support/callbacks.rb:126:in `block in run_callbacks'
activesupport-6.1.4.1/lib/active_support/callbacks.rb:137:in `run_callbacks'
actionpack-6.1.4.1/lib/abstract_controller/callbacks.rb:41:in `process_action'
actionpack-6.1.4.1/lib/action_controller/metal/rescue.rb:22:in `process_action'
actionpack-6.1.4.1/lib/action_controller/metal/instrumentation.rb:34:in `block in process_action'
activesupport-6.1.4.1/lib/active_support/notifications.rb:203:in `block in instrument'
activesupport-6.1.4.1/lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport-6.1.4.1/lib/active_support/notifications.rb:203:in `instrument'
actionpack-6.1.4.1/lib/action_controller/metal/instrumentation.rb:33:in `process_action'
actionpack-6.1.4.1/lib/action_controller/metal/params_wrapper.rb:249:in `process_action'
activerecord-6.1.4.1/lib/active_record/railties/controller_runtime.rb:27:in `process_action'
actionpack-6.1.4.1/lib/abstract_controller/base.rb:165:in `process'
actionview-6.1.4.1/lib/action_view/rendering.rb:39:in `process'
rack-mini-profiler-3.0.0/lib/mini_profiler/profiling_methods.rb:85:in `block in profile_method'
actionpack-6.1.4.1/lib/action_controller/metal.rb:190:in `dispatch'
actionpack-6.1.4.1/lib/action_controller/metal.rb:254:in `dispatch'
actionpack-6.1.4.1/lib/action_dispatch/routing/route_set.rb:50:in `dispatch'
actionpack-6.1.4.1/lib/action_dispatch/routing/route_set.rb:33:in `serve'
actionpack-6.1.4.1/lib/action_dispatch/journey/router.rb:50:in `block in serve'
actionpack-6.1.4.1/lib/action_dispatch/journey/router.rb:32:in `each'
actionpack-6.1.4.1/lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack-6.1.4.1/lib/action_dispatch/routing/route_set.rb:842:in `call'
/var/www/discourse/lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
rack-2.2.3/lib/rack/tempfile_reaper.rb:15:in `call'
rack-2.2.3/lib/rack/conditional_get.rb:40:in `call'
rack-2.2.3/lib/rack/head.rb:12:in `call'
actionpack-6.1.4.1/lib/action_dispatch/http/permissions_policy.rb:22:in `call'
/var/www/discourse/lib/content_security_policy/middleware.rb:12:in `call'
/var/www/discourse/lib/middleware/anonymous_cache.rb:358:in `call'
rack-2.2.3/lib/rack/session/abstract/id.rb:266:in `context'
rack-2.2.3/lib/rack/session/abstract/id.rb:260:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/cookies.rb:689:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
activesupport-6.1.4.1/lib/active_support/callbacks.rb:98:in `run_callbacks'
actionpack-6.1.4.1/lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/actionable_exceptions.rb:18:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/debug_exceptions.rb:29:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
logster-2.10.1/lib/logster/middleware/reporter.rb:43:in `call'
railties-6.1.4.1/lib/rails/rack/logger.rb:37:in `call_app'
railties-6.1.4.1/lib/rails/rack/logger.rb:28:in `call'
/var/www/discourse/config/initializers/100-quiet_logger.rb:23:in `call'
/var/www/discourse/config/initializers/100-silence_logger.rb:31:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/request_id.rb:26:in `call'
/var/www/discourse/lib/middleware/enforce_hostname.rb:23:in `call'
rack-2.2.3/lib/rack/method_override.rb:24:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/executor.rb:14:in `call'
rack-2.2.3/lib/rack/sendfile.rb:110:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/host_authorization.rb:92:in `call'
rack-mini-profiler-3.0.0/lib/mini_profiler/profiler.rb:249:in `call'
message_bus-4.2.0/lib/message_bus/rack/middleware.rb:60:in `call'
/var/www/discourse/lib/middleware/request_tracker.rb:202:in `call'
railties-6.1.4.1/lib/rails/engine.rb:539:in `call'
railties-6.1.4.1/lib/rails/railtie.rb:207:in `public_send'
railties-6.1.4.1/lib/rails/railtie.rb:207:in `method_missing'
rack-2.2.3/lib/rack/urlmap.rb:74:in `block in call'
rack-2.2.3/lib/rack/urlmap.rb:58:in `each'
rack-2.2.3/lib/rack/urlmap.rb:58:in `call'
unicorn-6.1.0/lib/unicorn/http_server.rb:634:in `process_client'
unicorn-6.1.0/lib/unicorn/http_server.rb:739:in `worker_loop'
unicorn-6.1.0/lib/unicorn/http_server.rb:547:in `spawn_missing_workers'
unicorn-6.1.0/lib/unicorn/http_server.rb:143:in `start'
unicorn-6.1.0/bin/unicorn:128:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/bin/unicorn:25:in `load'
/var/www/discourse/vendor/bundle/ruby/2.7.0/bin/unicorn:25:in `<main>'

Do this information help?
I’m doing what I can to try to repair these posts, but I’m starting to believe this has something to do with Discourse itself and not something on my side maybe? :person_shrugging:


edit: see the automatically linked post below.


Issue resolved:

Now I just have to rebake all my posts. :wink:


Another edit:

Could have worked for sure, and will for images that still have their old plain URL, but:

  • Since all the old Imageshack broken links were replaced by valid images displaying a Ukraine flag by Imageshack itself, they were automatically uploaded to Discourse, changing their URL to a markdown local image link.

  • Fortunately, all these flags were uploaded to Discourse with identical links (![](upload://sOlmOE8qRgLUJ8cCe6N1JNkDV3Y.jpeg) in my case - excellent Discourse behavior by the way :+1:), which means that they will be very easy to target and remove/replace with something else. :slight_smile:

I’m just writing this to inform people that would encounter the same issue as me after a migration.

4 Me gusta

Parece que el valor de poll_option_total a veces está mal. Estoy viendo más votos no anónimos por opción que el valor de poll_option_total. Y todos esos usuarios existen.

Usar GREATEST(..., 0) lo soluciona. Al menos, no falla.

        SELECT o.poll_option_id, o.poll_option_text, o.poll_option_total AS total_votes,
          GREATEST(CAST(o.poll_option_total AS SIGNED) - (
            SELECT COUNT(DISTINCT v.vote_user_id)
              FROM #{@table_prefix}poll_votes v
                JOIN #{@table_prefix}users u ON (v.vote_user_id = u.user_id)
                JOIN #{@table_prefix}topics t ON (v.topic_id = t.topic_id)
              WHERE v.poll_option_id = o.poll_option_id AND v.topic_id = o.topic_id
          ),0) AS anonymous_votes
        FROM #{@table_prefix}poll_options o
        WHERE o.topic_id = #{topic_id}
        ORDER BY o.poll_option_id
3 Me gusta

Realmente quiero migrar el foro phpbb 3.3 de mi empresa a Discourse. ¿Alguien tiene idea de cuándo será compatible?

1 me gusta
3 Me gusta

¡Oh wow, eso es genial! ¡Gracias!

1 me gusta

Si debo iniciar un nuevo hilo para esto, me disculpo de antemano.

Tengo un foro phpBB en una subcarpeta:

thedomain.com/forum/

Planeo usar el script de importación para migrar de phpBB a Discourse en un subdominio; es decir:

forum.thedomain.com

Por lo tanto, parece que todo lo que necesitaré hacer, para el dominio y los permalinks, es configurar lo siguiente en settings.yml usando HTTPS en el nuevo sitio:

site_prefix:
    # esto es necesario para reescribir enlaces internos en las publicaciones
    original: thdomain.com/forum    # sin http(s)://
    new: https://forum.thedomain.com       # con http:// o https://

  # Habilita esto si deseas redirigir los enlaces antiguos del foro a las nuevas ubicaciones.
  permalinks:
    categories: true  # redirige   /viewforum.php?f=1            a  /c/category-name
    topics: true      # redirige   /viewtopic.php?f=6&t=43       a  /t/topic-name/81
    posts: true      # redirige   /viewtopic.php?p=2455#p2455   a  /t/topic-name/81/4
    # Agrega un prefijo a cada tipo de enlace, por ejemplo, 'forum' para redirigir /forum/viewtopic.php?f=6&t=43 a /t/topic-name/81
    # Déjalo vacío si tu foro no se instaló en una subcarpeta.
    prefix: forum

Y luego, en el servidor original, que ejecuta Apache, en el .htaccess con RewriteEngine ya activado, necesitaré:

RewriteCond %{HTTP_HOST} ^thedomain.com
RewriteRule ^forum/(.*)$ https://forum.thedomain.com/$1 [L,R=301]

Si es realmente así de fácil, ¡este script es genial! :grinning:

Tengo un par de preguntas adicionales:

  1. Las publicaciones están configuradas como “false” en la configuración de permalinks. Sé que hay enlaces por ahí a publicaciones específicas, así que me gustaría que también tuvieran permalinks. ¿Hay alguna razón para no configurarlas como true; por ejemplo, rendimiento o algo así?
  2. ¿Está bien el prefijo sin comillas simples, o debería ir entre comillas como en el comentario?
2 Me gusta

Ralentizará ligeramente la importación, pero no debería preocuparse por eso. Está mayormente deshabilitado por defecto porque rara vez se necesita.

Sí, está bien.

2 Me gusta

Me encontré con un obstáculo mientras me preparo para esta importación.

El foro phpBB que planeo migrar está utilizando un BBcode personalizado que crea etiquetas <img> HTML para imágenes almacenadas en carpetas por año en un directorio fuera de phpBB, pero en la misma cuenta de usuario en el servidor. El BBcode tiene el siguiente formato:

[Gallery]{NUMBER1}|{NUMBER2}|{NUMBER3}|{SIMPLETEXT}[/Gallery]

El {NUMBER1} y {NUMBER2} son enteros para el ancho y alto de la imagen, respectivamente. El {NUMBER3} es un entero para la carpeta del año en la que se encuentra la imagen, y el {SIMPLETEXT} es el nombre del archivo de imagen. El reemplazo HTML para el BBcode se ve así:

<img class="postimage gallery-image" src="/gallery/files/{NUMBER3}/{SIMPLETEXT}" width="{NUMBER1}" height="{NUMBER2}" />

Lo que necesito resolver es cómo manejar este BBcode personalizado con el script de migración, tanto para convertir el BBcode personalizado a algo que Discourse pueda usar, como para averiguar dónde colocar los archivos de imagen en el árbol de archivos para la importación.

Eché un vistazo a Ruby-BBcode-to-MD, que dice que “permite extender fácilmente este conjunto con etiquetas personalizadas editando tags.rb”. Eché un vistazo a tags.rb, pero como es la primera vez que veo código Ruby, estoy perdido sobre cómo lidiar con mi BBcode personalizado, ya que su formato separado por barras difiere de cualquiera de los BBcodes oficiales que el archivo tags.rb incluye y que podría haber utilizado como guía.

Todavía no tengo cargado templates/import/phpbb3.template.yml, ¿así que supongo que eso agregará el gem de Ruby BBcode a MD?

Así que tengo preguntas:

  1. ¿Cuál es la mejor manera de manejar este BBcode personalizado para la migración? ¿Editar el archivo tags.rb es el camino a seguir? (Si es así, investigaré un poco sobre codificación Ruby y quizás expresiones regulares a continuación, ¡pero cualquier indicación será bienvenida!)
  2. ¿Cuál es el mejor lugar para colocar los archivos de imagen de esta galería en el árbol de archivos de importación para que se guarden en Discourse y aparezcan en las publicaciones importadas?
1 me gusta

Esa gema ya no se usa. ¿Desde qué versión de phpBB estás importando? Si es la v3.1 o inferior, necesitarás aplicar algo de magia de expresiones regulares en discourse/script/import_scripts/phpbb3/support/text_processor.rb at ea2fd75d10e81687334f8d29e0d3e786dbdb4a53 · discourse/discourse · GitHub.

Para la v3.2 puedes añadir el manejo de BBCode en discourse/script/import_scripts/phpbb3/support/bbcode/xml_to_markdown.rb at a71b219c9a18ad418e330282fde511bcb79ba7c4 · discourse/discourse · GitHub

2 Me gusta