Importar scripts vbulletin5.rb

Estoy utilizando el script de importación oficial para vBulletin v5 y me he encontrado con un problema.

La estructura de mi foro vBulletin es la siguiente:

/forum/
/forum/sub-categoría1/
/forum/sub-categoría1/hilo1/
/forum/sub-categoría1/hilo2/
/forum/sub-categoría2/
/forum/sub-categoría2/hilo1/
/forum/sub-categoría2/hilo2/

Al ejecutar el script de importación, esto resulta en dos categorías en Discourse sin ningún hilo:

/c/sub-categoría1
/c/sub-categoría2

Revisé otro foro vBulletin y noté que no anidan sus URLs. Ahora asumo que este es el cambio que debo hacer en mi foro antes de poder usar el script:

/forum/
/forum/sub-categoría1/
/forum/sub-categoría2/
/forum/hilo1a/
/forum/hilo2a/
/forum/hilo1b/
/forum/hilo2b/

Después, tendría que asignar manualmente las categorías a cada hilo nuevamente.

¿Alguien tiene experiencia usando este script?

¿Quizás hay algo que llame la atención dentro del script que se pueda cambiar para que pueda manejar una estructura más anidada? Es posible que esté siguiendo un camino completamente equivocado.

¿Por “hilo” te refieres a un tema de Discourse? ¿Se están creando los temas pero no en las categorías correctas?

Hola Jay,

gracias por tu respuesta.

Ah, sí: me refiero a los temas de Discourse. No hay nada allí, solo esas categorías vacías. Y todos los usuarios se importaron correctamente.

Mike

Algo está impidiendo que se importen los temas y las publicaciones. Creía que verías errores cuando se ejecutara. Los temas y las publicaciones se crean después de los usuarios. Creo que los temas y las publicaciones están en funciones separadas. El importador debería mostrarte el progreso de esos elementos, tal como lo hizo con los usuarios.

No hay mensajes de error durante la importación; solo se muestran algunas advertencias sobre direcciones de correo electrónico de usuario inválidas cuando se ejecuta la función create_users. Sin embargo, al final, la importación de usuarios se realiza con éxito. Aquí está el registro (he eliminado las advertencias ya que contenían direcciones de correo electrónico de clientes):

importing posts...
5 / 5 (100.0%)  [290527 items/min]                                                            
importing attachments...   
20182 / 5 (403640.0%)

Aquí es donde creo que solo ve mis cinco categorías como publicaciones y las importa. ¿Y qué pasa con todos los archivos adjuntos de los temas reales que no se importaron? No parece saber qué hacer con ellos.

Descargo de responsabilidad:

Inicialmente, la importación falló porque la base de datos de vBulletin que me proporcionaron no tenía una tabla llamada customprofilepic. Agregué una tabla vacía en su lugar.

Tampoco había avatares personalizados, por lo que el directorio AVATAR_DIR, al que hace referencia el script de importación, es simplemente una carpeta vacía que creé. Comenté las siguientes líneas en el script de importación que hacían referencia a esos recursos:

create_users(users, total: user_count, offset: offset) do |user|
        username = @htmlentities.decode(user["username"]).strip
        {
          id: user["userid"],
          name: username,
          username: username,
          email: user["email"].presence || fake_email,
          admin: user['admin'] == 1,
          password: user["password"],
          website: user["homepage"].strip,
          title: @htmlentities.decode(user["usertitle"]).strip,
          primary_group_id: group_id_from_imported_group_id(user["usergroupid"]),
          created_at: parse_timestamp(user["joindate"])
          # post_create_action: proc do |u|
          #   @old_username_to_new_usernames[user["username"]] = u.username
          #   import_profile_picture(user, u)
          #   import_profile_background(user, u)
          # end
        }
      end

Pero, según mi entendimiento, esos cambios solo afectan la creación de usuarios. Y los usuarios se crean correctamente.

Este es el script de importación completo que estoy utilizando:

El script recopila todos los temas de la tabla node dentro de la base de datos de vBulletin, la cual está presente y contiene alrededor de 34 mil publicaciones. Los nombres de las columnas son idénticos a los que referencia el script:

Parece que debería funcionar sin problemas :roll_eyes:

El script de importación busca contenttypeid=23 y contenttypeid=22 para crear publicaciones.

Al revisar rápidamente la tabla node, puedo afirmar que el 23 representa una publicación con un archivo adjunto y el 22 debería ser el propio archivo adjunto.

La mayoría de las publicaciones tienen contenttypeid=21: publicaciones sin archivos adjuntos. No veo una importación para estas. ¿O esto está cubierto por:

post_count = mysql_query("SELECT COUNT(nodeid) cnt FROM #{DBPREFIX}node WHERE parentid NOT IN (
SELECT nodeid FROM #{DBPREFIX}node WHERE contenttypeid=23 ) AND contenttypeid=22;").first["cnt"]

Esto recorre todo lo que queda después de que la importación termine con los tipos 23/22. Pero hay más identificadores de tipo de contenido además de 23/22/21, por lo que esto también los incluiría.


Las categorías se importan en relación con un ROOT_NODE que se configuró previamente en 2. ¿Quizás tenga que cambiarlo a 3 para admitir mis URLs de “3 niveles anidados”?

ACTUALIZACIÓN: Acabo de volver a ejecutar la importación con ROOT_NODE=3 y no cambió nada.

Parece que tu vBulletin es diferente de lo que espera el script. Antes de poder importar los mensajes, tendrás que averiguar por qué no se creó ninguno de los temas.

Ok. Es el contenttypeid el que está causando el problema:

def import_categories
    puts "", "importando categorías de nivel superior..."

    categories = mysql_query("SELECT nodeid AS forumid, title, description, displayorder, parentid
	      FROM #{DBPREFIX}node
          WHERE parentid=#{ROOT_NODE}
        UNION
          SELECT nodeid, title, description, displayorder, parentid
          FROM #{DBPREFIX}node
          WHERE contenttypeid = 20
            AND parentid IN (SELECT nodeid FROM #{DBPREFIX}node WHERE parentid=#{ROOT_NODE})").to_a

Por ejemplo, la función import_categories usa contenttypeid = 23, que es el mismo ID que el script utiliza para las publicaciones. El ID para las categorías es 20. Al cambiar esto dentro del script, finalmente pude ver mis subcategorías / temas :raised_hands:

Ahora todo lo que falta son los hilos / publicaciones

He realizado una solicitud de extracción con algunas actualizaciones para el importador de VBulletin5. Uno de los cambios más importantes es que se eliminaron estos ID codificados de forma rígida.

También hay un mejor soporte para las cargas y el importador ahora importa etiquetas y crea enlaces permanentes para los temas y las (sub)categorías.