Límite de tasa excedido al migrar hilos y publicaciones

Hola a todos,

Actualmente estoy escribiendo algo para migrar un foro Woltlab (Wbb) a Discourse y estoy dispuesto a compartirlo una vez que esté algo hecho.

Ahora mismo estoy migrando categorías, foros, usuarios y sus grupos con más o menos éxito y sin demasiados problemas. Sin embargo, de vez en cuando, durante la ejecución, empeora y recibo un error de “Ratelimit Exceeded” al procesar las publicaciones y los hilos.

Mi problema es que todavía soy relativamente nuevo y estoy recopilando fragmentos de otros migradores, así que actualmente no tengo ni idea de dónde viene el mensaje.

¿Proviene de la API de Discourse? Y si es así, ¿puedo deshabilitar de alguna manera el límite de velocidad durante las importaciones por completo?

def migrate_threads_and_posts
  puts "Migrando hilos y publicaciones..."
  @client.query("SELECT * FROM wbb1_thread ORDER BY time ASC").each do |thread_row|
    begin
      next if thread_row[:isDeleted] == 1 || thread_row[:movedThreadID]

      # Asegurar que lastPosterID se mapea a un usuario válido
      last_post_user_id = @user_map[thread_row[:lastPosterID]] || @user_map[thread_row[:userID]]

      # Si lastPosterID y userID son nulos, crear un usuario marcador de posición
      if last_post_user_id.nil? && thread_row[:lastPoster]
        last_post_user_id = find_or_create_placeholder_user(thread_row[:lastPoster])
      end

      # Asegurar que existe un ID de usuario válido
      last_post_user_id ||= User.first.id

      # Obtener el ID de usuario creador del tema o crear un marcador de posición
      creator_user_id = @user_map[thread_row[:userID]] || find_or_create_placeholder_user(thread_row[:username]) || User.first.id

      # Crear el tema
      topic = Topic.new(
        title: thread_row[:topic],
        user_id: creator_user_id,
        category_id: @forum_map[thread_row[:boardID]],
        created_at: Time.at(thread_row[:time]),
        updated_at: Time.at(thread_row[:lastPostTime]),
        last_post_user_id: last_post_user_id
      )

      if topic.save(validate: false)
        puts "Tema importado: #{topic.title} (ID: #{topic.id})"

        # Migrar publicaciones
        migrate_posts(thread_row[:threadID], topic.id)
      else
        puts "Error al importar el tema #{thread_row[:topic]}: #{topic.errors.full_messages.join(', ')}"
      end

      sleep(7) # Aumento del tiempo de espera para evitar el límite de velocidad
    rescue => e
      puts "Excepción al importar el tema #{thread_row[:topic]}: #{e.message}"
    end
  end
end

He intentado limpiar el código y comentar lo máximo posible. Espero que alguien pueda ayudar con el límite de velocidad.

También intenté buscar en el foro, pero solo vi que muchos tenían problemas similares pero nunca una solución real. Así que si me perdí algo, disculpen la duplicación.

Gracias a todos.

2 Me gusta

Okay. Es literalmente RateLimiter.disable

Nunca mente entonces :slight_smile:

5 Me gusta

Será mucho más fácil si utilizas uno de los scripts de importación como punto de partida.

Resolverá un montón de problemas que aún no sabes que tienes.

2 Me gusta

¿Qué problemas podrían ser? Actualmente me estoy orientando en el script de importación de phpbb y xenforo.

1 me gusta

El script phpbb3 está bien escrito, pero requiere un profundo conocimiento de Ruby. xenforo está bien, creo. Deberías encontrar uno que tenga las características que deseas (mensajes privados, enlaces permanentes, grupos, administradores, usuarios suspendidos).

No puedo adivinar lo que no sabes, pero formas de conectar los ID antiguos con los nuevos, formas de asegurarse de que los mismos datos no se importen dos veces son dos que se me ocurren.

3 Me gusta

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