Ratelimit überschritten beim Migrieren von Threads und Beiträgen

Hallo zusammen,

ich schreibe gerade etwas, um ein Woltlab (Wbb) Forum nach Discourse zu migrieren, und bin bereit, es zu teilen, sobald es einigermaßen fertig ist.

Im Moment migriere ich mehr oder weniger erfolgreich Kategorien, Foren, Benutzer und deren Gruppen ohne allzu große Probleme. Allerdings wird es ab und zu während der Laufzeit schlimmer, ich bekomme eine “Ratelimit Exceeded”-Fehlermeldung, während ich die Beiträge und Threads verarbeite.

Mein Problem ist, dass ich noch relativ neu bin und hauptsächlich Stücke von anderen Migratoren sammle, daher habe ich derzeit keine Ahnung, woher die Meldung kommt.

Kommt sie von der API von Discourse? Und wenn ja, kann ich das Ratenlimit bei Importen irgendwie ganz deaktivieren?

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

Ich habe versucht, den Code aufzuräumen und so viel wie möglich zu kommentieren. Ich hoffe, jemand kann beim Ratenlimit helfen.

Ich habe auch versucht, hier im Forum zu suchen, aber ich habe nur viele ähnliche Probleme gesehen, aber nie wirklich eine Lösung. Wenn ich also etwas übersehen habe, tut mir die Duplizierung leid.

Danke euch allen.

2 „Gefällt mir“

Okay. Es ist buchstäblich RateLimiter.disable

Vergessen Sie es dann :slight_smile:

5 „Gefällt mir“

Es wird viel einfacher sein, wenn du eines der Import-Skripte als Ausgangspunkt verwendest.

Es wird eine Reihe von Problemen lösen, von denen du noch nicht einmal weißt, dass du sie hast.

2 „Gefällt mir“

Welche Probleme könnten das sein? Ich orientiere mich gerade am Importskript von phpbb und xenforo.

1 „Gefällt mir“

Das phpbb3-Skript ist gut geschrieben, erfordert aber ein tiefes Verständnis von Ruby. xenforo ist in Ordnung, denke ich. Sie sollten eines finden, das die gewünschten Funktionen hat (PMs? Permalinks? Gruppen? Admins? Gesperrte Benutzer?)

Ich kann nicht erraten, was Sie nicht wissen, aber Möglichkeiten, alte IDs mit neuen zu verbinden, Möglichkeiten, sicherzustellen, dass dieselben Daten nicht zweimal importiert werden, sind zwei, die mir einfallen.

3 „Gefällt mir“

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