ruby-on-rails - 将网络爬虫移至后台 : Resque or Sidekiq

标签 ruby-on-rails background-process resque sidekiq

我有一个 Rails 应用程序,允许用户上传 CSV 文件,其中包含要抓取的 URL 列表(有时为 200k)。然后在 Controller 中,我将转到该文件的每一行,然后调用另一个接受 URL 和一些参数的方法,然后当爬网方法完成时,将一些变量保存到几个模型中。下面是我的 Controller 的样子:

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 如今维护得更好,而且多线程对于您的用例非常有用,所以我会选择它。好的起点是 the Sidekiq homepagethis Railscast ,两者都为您提供了大量信息,帮助您快速上手。

关于ruby-on-rails - 将网络爬虫移至后台 : Resque or Sidekiq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12732782/

相关文章:

ruby - Resque vs Sidekiq?

mysql - Resque Mysql2::Error: 用户已超出 'max_user_connections' 资源(当前值:10)

mysql - 从不同模型的 Controller 更新一个模型的属性

iphone - 检查两个 NSOperationQueue 何时完成调用 endBackgroundTask 以停止后台任务模式

javascript - 扩展执行似乎在 Windows 10 通用 JavaScript 应用程序中不起作用

bash - 这个其他版本的 bash fork 炸弹是如何工作的?

ruby-on-rails - Redis 和 Resque 是否需要从与应用程序相同的目录启动? ( rails )

ruby-on-rails - Shoulda on Rails - 应该推迟 render_with_layout

ruby-on-rails - ActiveAdmin 在索引页编辑资源

ruby-on-rails - 如何在 Ruby Views 中制作漂亮的 UI