Limite de taxa excedido ao migrar tópicos e posts

Olá a todos,

Atualmente estou escrevendo algo para migrar um Fórum Woltlab (Wbb) para Discourse e estou disposto a compartilhar assim que estiver pronto.

No momento, estou migrando categorias, fóruns, usuários e seus grupos com mais ou menos sucesso, sem muitos problemas. No entanto, de vez em quando, durante a execução, piora, recebo um erro “Ratelimit Exceeded”, ao processar as postagens e tópicos.

Meu problema é que ainda sou relativamente novo e estou coletando pedaços de outros migradores, então estou atualmente sem saber de onde vem a mensagem.

Ela vem da API do Discourse? E se sim, posso desabilitar de alguma forma o rate limiting durante as importações inteiramente?

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

Tentei limpar o código e comentar o máximo possível. Espero que alguém possa ajudar com o rate limiting.

Também tentei pesquisar aqui no fórum, mas só vi que muitos tiveram problemas semelhantes, mas nunca uma solução. Então, se perdi alguma coisa, desculpe pela duplicidade.

Obrigado a todos.

2 curtidas

Ok. É literalmente RateLimiter.disable

Deixe pra lá então :slight_smile:

5 curtidas

Será muito mais fácil se você usar um dos scripts de importação como ponto de partida.

Isso resolverá um monte de problemas que você ainda não sabe que tem.

2 curtidas

Quais problemas poderiam ser? Atualmente estou me orientando no script de importação do phpbb e do xenforo.

1 curtida

O script phpbb3 é bem escrito, mas requer um profundo entendimento de Ruby. xenforo está ok, eu acho. Você deve encontrar um que tenha os recursos que você deseja (Mensagens Privadas? Permalinks? Grupos? Administradores? Usuários suspensos?)

Não posso adivinhar o que você não sabe, mas maneiras de conectar IDs antigos aos novos, maneiras de garantir que os mesmos dados não sejam importados duas vezes são duas que me vêm à mente.

3 curtidas

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