>

Resque 및 SmarterCSV 이지만 동일한 오류가 계속 발생합니다 :

undefined method 'close' for nil:NilClass

내 resque 로그에

가 있습니다. 왜 그런지 잘 모르겠습니다. 파고 들었고 이것을 본 사람들은 파일 위치가 잘못되었다는 것을 알았지 만 파일을 매개 변수로 전달하는 것입니다.

내 양식 :

<%= form_tag check_upload_file_path, multipart: true do %>
    <%= file_field_tag :file %>
    <%= select_tag 'location', options_from_collection_for_select(Location.real, 'id', 'name'), include_blank: true %>
    <br>
    <%= submit_tag "Preview", class: "btn btn-awaken btn-sm approve-me", name: 'preview' %>
<% end %>

내 컨트롤러 :

def check_upload_file
    Resque.enqueue(AddClientsFromScale, params[:file], params[:location])
    redirect_to bulk_uploads_path
end

직장 :

class AddClientsFromScale
    @queue = :validate_file
    puts "adding clients from scale..."
    def self.perform(file, location_id)
        p file, location_id
        WeighIn.check_file(file, location_id)
    end
end

내 모델 :

class WeighIn < ActiveRecord::Base
    @hash_for_new_clients = {
        ' ID'                           => 'scale_id',
        'Full Name'                     => 'name',
    }
    def self.check_file(file, location_id)
        options = {:key_mapping => @hash_for_new_clients, :strings_as_keys => true, :keep_original_headers => true, :remove_unmapped_keys => true}
        # prints the file and contents properly
        p "file: ", file["tempfile"] 
        SmarterCSV.process(file, options) do |row|
            p row
        end
    end
end

무슨 일이 일어나고 있는지 아십니까?


  • 답변 # 1

    문제는 file  변수는 파일 자체보다 많은 데이터를 포함하는 해시입니다. 단서는 file["tempfile"] 를 사용하여 인쇄하는 곳입니다. . 처리하려는 실제 파일을 참조하기 때문에 SmarterCSV에 연결해야합니다.

    SmarterCSV.process(file["tempfile"], options) do |row|
    
    

    제 경우에는 SmarterCSV에서이 오류가 발생하는 추가 파일 인코딩 문제가있었습니다 :

    와이즈 비즈

    이것은 결국 저를 위해 한 일입니다 :

    WARNING: you are trying to process UTF-8 input, but did not open the input with "b:utf-8" option. See README file "NOTES about File Encodings".

    f = File.open(file["tempfile"], "r:bom|utf-8") SmarterCSV.process(f, options) do |row| ...

관련 자료

  • 이전 c# - NET Reflection에서 BindingFlagsDeclaredOnly와 함께 GetProperties () 사용
  • 다음 gun - GunDB로 p2p 트위터 클론을 어떻게 구축 하시겠습니까?