【发布时间】:2017-02-15 18:46:01
【问题描述】:
我的app/services 中有一个CsvImport 服务对象,我正在尝试从Worker 中调用其中一个类方法。
class InventoryUploadWorker
include Sidekiq::Worker
def perform(file_path, company_id)
CsvImport.csv_import(file_path, Company.find(company_id))
end
end
但似乎工人不知道类是什么,我尝试require 'csv_import' 无济于事。
这里是崩溃的地方:
WARN: ArgumentError: undefined class/module CsvImport
被调用的方法 csv_import.rb
class CsvImport
require "benchmark"
require 'csv'
def self.csv_import(filename, company)
time = Benchmark.measure do
File.open(filename) do |file|
headers = file.first
file.lazy.each_slice(150) do |lines|
Part.transaction do
inventory = []
insert_to_parts_db = []
rows = CSV.parse(lines.join, write_headers: true, headers: headers)
rows.map do |row|
part_match = Part.find_by(part_num: row['part_num'])
new_part = build_new_part(row['part_num'], row['description']) unless part_match
quantity = row['quantity'].to_i
row.delete('quantity')
row["condition"] = match_condition(row)
quantity.times do
part = InventoryPart.new(
part_num: row["part_num"],
description: row["description"],
condition: row["condition"],
serial_num: row["serial_num"],
company_id: company.id,
part_id: part_match ? part_match.id : new_part.id
)
inventory << part
end
end
InventoryPart.import inventory
end
end
end
end
puts time
end
【问题讨论】:
-
你能发布那个文件吗,
CsvImport? -
为了简洁起见,我发布了调用的类/方法。 @冰人
-
你使用的是什么版本的 Rails?
-
4.2.5.1 @Iceman
-
嗨,我也有同样的问题。你设法解决了吗?我已经创建了另一个有关此问题的 stackoverflow 帖子,但令人惊讶的是,没有人回答看起来很基本的问题。stackoverflow.com/questions/61329524/…
标签: ruby-on-rails redis backgroundworker sidekiq