Ruby on rails 将网络爬虫移动到后台:Resque或Sidekiq

Ruby on rails 将网络爬虫移动到后台:Resque或Sidekiq,ruby-on-rails,background-process,resque,sidekiq,Ruby On Rails,Background Process,Resque,Sidekiq,我有一个Rails应用程序,它允许用户上传一个CSV文件,其中包含一个要爬网的URL列表(有时是200k)。然后在控制器中,我将转到该文件的每一行,然后调用另一个方法,该方法获取URL和一些参数,然后当爬网方法完成时,将一些变量保存到一些模型中。下面是我的控制器的外观: def import if request.post? && params[:inputfile].present? infile = params[:inputfile].read CSV.

我有一个Rails应用程序,它允许用户上传一个CSV文件,其中包含一个要爬网的URL列表(有时是200k)。然后在控制器中,我将转到该文件的每一行,然后调用另一个方法,该方法获取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来做这个?如果是这样的话,我应该从哪里开始呢?

听起来你挖得够多了,最终找到了正确的方向!我也会将其考虑到一个单独的后台工作系统中


Sidekiq现在维护得更好,多线程对于您的用例非常有用,所以我选择它。好的起点是和,这两个起点都为您提供了大量信息,让您可以开始运行。

我有一个问题,有可能在另一个队列中有一个队列?我看到了Railscast和sidekiq主页/github,我看到的示例很简单。我在寻找更复杂的东西,比如嵌套队列之类的?如果您理解我的观点,请告诉我。在处理过程中,工人将额外的工作排在队列中并不罕见。这并不是每个sé的嵌套队列(就Sidekiq/Resque/任何相关内容而言,队列仍然是独立的),但我认为这是您想要的。回到您的示例,处理CSV可能是一个为每行启动爬虫作业的作业。这正是我想要的。。。我会讨论的。谢谢