スレッドと投稿の移行時にレートリミット超過

皆さん、こんにちは。

現在、Woltlab (Wbb) フォーラムを Discourse に移行するための作業を行っており、ある程度完了したら共有するつもりです。

現時点では、カテゴリ、フォーラム、ユーザー、およびそのグループを、あまり問題なく移行することに成功しています。しかし、実行中に時々、投稿やスレッドを処理しているときに「Ratelimit Exceeded」というエラーが発生し、状況が悪化します。

問題は、私がまだ比較的初心者であり、他の移行ツールから断片的な情報を集めているだけで、このメッセージがどこから来ているのか全く分からないことです。

Discourse の API から来ているのでしょうか?もしそうなら、インポート中にレート制限を無効にすることはできますか?

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]

      # lastPosterID が有効なユーザーにマッピングされていることを確認
      last_post_user_id = @user_map[thread_row[:lastPosterID]] || @user_map[thread_row[:userID]]

      # lastPosterID と userID が null の場合、プレースホルダーユーザーを作成
      if last_post_user_id.nil? && thread_row[:lastPoster]
        last_post_user_id = find_or_create_placeholder_user(thread_row[:lastPoster])
      end

      # 有効なユーザー ID が存在することを確認
      last_post_user_id ||= User.first.id

      # トピック作成者のユーザー ID を取得するか、プレースホルダーを作成
      creator_user_id = @user_map[thread_row[:userID]] || find_or_create_placeholder_user(thread_row[:username]) || User.first.id

      # トピックを作成
      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(thread_row[:threadID], topic.id)
      else
        puts "Error importing thread #{thread_row[:topic]}: #{topic.errors.full_messages.join(', ')}"
      end

      sleep(7) # レート制限を回避するためにスリープ時間を増やしました
    rescue => e
      puts "Exception importing thread #{thread_row[:topic]}: #{e.message}"
    end
  end
end

コードをクリーンアップし、できるだけコメントを付けました。レート制限について誰かが助けてくれることを願っています。

フォーラムでも検索してみましたが、同様の問題を抱えている人はたくさんいましたが、解決策は見つかりませんでした。もし何か見落としていたら、重複投稿をお許しください。

皆さん、ありがとうございます。

「いいね!」 2

わかりました。文字通り RateLimiter.disable です。

では、気にしないでください :slight_smile:

「いいね!」 5

開始点として、インポートスクリプト のいずれかを使用すると、はるかに簡単になります。

まだ気づいていない多くの問題を解決してくれるでしょう。

「いいね!」 2

それはどのような問題でしょうか?現在、phpbbとxenforoのインポートスクリプトを検討しています。

「いいね!」 1

phpbb3スクリプトはよく書かれていますが、Rubyの深い理解が必要です。xenforoは大丈夫だと思います。必要な機能(プライベートメッセージ?パーマリンク?グループ?管理者?停止中のユーザー?)を備えたものを探すべきです。

あなたが知らないことを推測することはできませんが、古いIDを新しいIDに接続する方法、同じデータが二重にインポートされないようにする方法などが考えられます。

「いいね!」 3

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