app/services
にCsvImport
サービスオブジェクトがあり、クラスメソッドの1つをWorker内から呼び出そうとしています。Rails + Sidekiqがクラスを認識しない
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'
をしようとしましたが、クラスが何であるかを知らないようです。
それが壊れHERESに:
WARN: ArgumentError: undefined class/module CsvImport
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'を投稿することができますか? – Iceman
私は、簡潔さのために呼び出されているクラス/メソッドを投稿しました。 @Iceman – gemart
どのバージョンのRailsを使用していますか? – Iceman