2017-02-15 45 views
0

app/servicesCsvImportサービスオブジェクトがあり、クラスメソッドの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 
+0

は、あなたがそのファイル、 'CsvImport'を投稿することができますか? – Iceman

+1

私は、簡潔さのために呼び出されているクラス/メソッドを投稿しました。 @Iceman – gemart

+0

どのバージョンのRailsを使用していますか? – Iceman

答えて

-1

csv_import.rbに呼び出されるメソッドがapplication.rb

config.autoload_paths += Dir["#{config.root}/app/services"] 

詳細にここに詳細を追加してください: autoload-paths

0

お客様のご要望は、クラス内にあります。クラスがロードされているときではなく、ファイルがロードされるときにすぐに必要となるように、クラスの外に配置します。代わりに

class CsvImport 
require "benchmark" 
require 'csv' 
... 

が、これは

require "benchmark" 
require 'csv' 
class CsvImport 
    ... 
関連する問題