Salut à tous,
J’écris actuellement quelque chose pour migrer un forum Woltlab (Wbb) vers Discourse et je suis prêt à le partager une fois qu’il sera plus ou moins terminé.
Pour l’instant, je migre plus ou moins avec succès les catégories, les forums, les utilisateurs et leurs groupes sans trop de problèmes. Cependant, de temps en temps, pendant l’exécution, cela s’aggrave, j’obtiens une erreur “Ratelimit Exceeded”, lors du traitement des messages et des fils de discussion.
Mon problème est que je suis encore relativement nouveau et que je rassemble principalement des bribes d’autres outils de migration, donc je suis actuellement dans le flou quant à l’origine du message.
Vient-il de l’API de Discourse ? Et si oui, puis-je désactiver d’une manière ou d’une autre la limitation de débit pendant les importations ?
def migrate_threads_and_posts
puts "Migrating threads and posts..."
@client.query("SELECT * FROM wbb1_thread ORDER BY time ASC").each do |thread_row|
begin
next if thread_row[:isDeleted] == 1 || thread_row[:movedThreadID]
# Ensure lastPosterID maps to a valid user
last_post_user_id = @user_map[thread_row[:lastPosterID]] || @user_map[thread_row[:userID]]
# If lastPosterID and userID are null, create a placeholder user
if last_post_user_id.nil? && thread_row[:lastPoster]
last_post_user_id = find_or_create_placeholder_user(thread_row[:lastPoster])
end
# Ensure a valid user ID exists
last_post_user_id ||= User.first.id
# Get topic creator user ID or create placeholder
creator_user_id = @user_map[thread_row[:userID]] || find_or_create_placeholder_user(thread_row[:username]) || User.first.id
# Create the topic
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 "Imported thread: #{topic.title} (ID: #{topic.id})"
# Migrate posts
migrate_posts(thread_row[:threadID], topic.id)
else
puts "Error importing thread #{thread_row[:topic]}: #{topic.errors.full_messages.join(', ')}"
end
sleep(7) # Increased sleep to avoid rate limiting
rescue => e
puts "Exception importing thread #{thread_row[:topic]}: #{e.message}"
end
end
end
J’ai essayé de nettoyer le code et de commenter autant que possible. J’espère que quelqu’un pourra m’aider avec la limitation de débit.
J’ai également essayé de chercher sur le forum ici, mais je n’ai vu que beaucoup avaient des problèmes similaires mais jamais vraiment de solution. Donc, si j’ai manqué quelque chose, désolé pour le doublon.
Merci à tous.