上传csv文件,在后台导入和处理

时间:2014-04-17 17:48:36

标签: ruby-on-rails ruby csv

我目前正在将CSV文件导入我的数据库,如下所示:

class InventoryItemsController < ApplicationController

def import
    InventoryItem.import(params[:file], params[:store_id])
    redirect_to vendors_dashboard_path, notice: "Inventory Imported."
end

end

模型方法。

class InventoryItem < ActiveRecord::Base

def self.import(file, store_id)
    CSV.foreach(file.path, headers: true) do |row|
    inventory_item = InventoryItem.find_or_initialize_by_upc_and_store_id(row[0], store_id)
    inventory_item.update_attributes(:price => row.to_hash["price"], :updated_at => "#{Time.now}")
end

end

问题是我现在开始做一些更大的csv文件(65k行),并且应用程序只是在那里挂起10分钟,而一切都在运行。有没有办法我可以上传文件然后在后台处理它?运行Rails 3和Ruby 1.9.3。

2 个答案:

答案 0 :(得分:1)

你看过delayed_job宝石了吗?它允许您在数据库中对作业进行排队,然后在后台异步处理它。

github上的delayed_job README页面的简要说明:

  

延迟::作业(或DJ)封装了在后台异步执行较长任务的常见模式。

编辑:另请参阅sidekiq

另一个不错的选择是sidekiq。您可以通过阅读sidekiq FAQ来了解这些不同的异步处理宝石是如何进行比较的。 Railscast有点旧,但它仍然提供了一个很好的教程和介绍如何使用sidekiq。

答案 1 :(得分:0)

您可以尝试FastCSV而不是CSV类。