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.