У меня есть служебный объект CsvImport
в моем app/services
, и я пытаюсь вызвать один из методов класса из рабочего.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
метод вызывается в 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'? – Iceman
Я отправил класс/метод, вызываемый для краткости. @Iceman – gemart
Какую версию Rails вы используете? – Iceman