我目前正在将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。
答案 0 :(得分:1)
你看过delayed_job宝石了吗?它允许您在数据库中对作业进行排队,然后在后台异步处理它。
github上的delayed_job README页面的简要说明:
延迟::作业(或DJ)封装了在后台异步执行较长任务的常见模式。
另一个不错的选择是sidekiq。您可以通过阅读sidekiq FAQ来了解这些不同的异步处理宝石是如何进行比较的。 Railscast有点旧,但它仍然提供了一个很好的教程和介绍如何使用sidekiq。
答案 1 :(得分:0)
您可以尝试FastCSV而不是CSV类。