Limite de débit dépassée lors de la migration de sujets et de messages

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.

2 « J'aime »

D’accord. C’est littéralement RateLimiter.disable

Laissez tomber alors :slight_smile:

5 « J'aime »

Ce sera beaucoup plus facile si vous utilisez l’un des scripts d’importation comme point de départ.

Cela résoudra un tas de problèmes que vous ne savez pas encore avoir.

2 « J'aime »

Quels problèmes pourraient être ceux-là ? Je m’oriente actuellement sur le script d’importation phpbb et xenforo.

1 « J'aime »

Le script phpbb3 est bien écrit, mais nécessite une compréhension approfondie de Ruby. xenforo est correct, je pense. Vous devriez en trouver un qui possède les fonctionnalités que vous souhaitez (MP ? permaliens ? groupes ? administrateurs ? utilisateurs suspendus ?)

Je ne peux pas deviner ce que vous ne savez pas, mais des moyens de connecter les anciens ID aux nouveaux, des moyens de s’assurer que les mêmes données ne sont pas importées deux fois sont deux exemples qui me viennent à l’esprit.

3 « J'aime »

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