2

ユーザーがクロールする URL のリスト (場合によっては 200k) を含む CSV ファイルをアップロードできるようにする Rails アプリがあります。次に、コントローラーでこのファイルの各行に移動し、URL といくつかのパラメーターを受け取る別のメソッドを呼び出します。クロール メソッドが完了したら、いくつかの変数をいくつかのモデルに保存します。以下は、私のコントローラーがどのように見えるかのようなものです:

def import
  if request.post? && params[:inputfile].present?
    infile = params[:inputfile].read
    CSV.parse(infile) do |row|
      @crawler = Crawler.new(row[0])
      @crawler.crawl #do the actual crawling using Mechanize Gem and set a few variable in the crawler object
      #when crawl is done save a few stuff into some models
    end
  end
end

これをバックグラウンドに移動し (このプロセスが Rails アプリ全体を保持しないようにするため)、各行のコードを非同期で実行できるようにする必要があります。すべてをキューに入れ、各行のキュー内にキューを配置するようなものを考えていました...またはそのようなもの。これにResqueまたはSidekiqを使用できると考えていましたか?もしそうなら、どこから始めるべきですか?

4

1 に答える 1

3

正しい方向にたどり着くのに十分な掘り下げを行ったようですね! 私はそれを別のバックグラウンド ワーカー システムにも含めます。

Sidekiq は最近よく維持されており、マルチスレッドはユースケースに非常に役立つので、それを選択します。Sidekiq のホームページこの Railscastから始めるのが良いでしょう。どちらも、すぐに使い始めるための多くの情報を提供してくれます。

于 2012-10-04T18:24:51.510 に答える