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.