2013-09-06 8 views
8

मैं बाहरी पार्टी द्वारा अपलोड की गई .xlsx स्प्रैडशीट को संसाधित करने के लिए roo मणि का उपयोग करने का प्रयास कर रहा हूं। -रेल पर रूबी roo मणि ज़िप/ज़िपफाइल सिस्टम लोड नहीं कर सकता

LoadError (ज़िप/zipfilesystem जैसे फ़ाइल लोड नहीं कर सकता):: मैं निम्न त्रुटि हो रही है

मैं ऐसे ऐसे फ़ाइल लोड नहीं कर सकता के रूप में यह एक करने के लिए इसी तरह के सवाल (का एक बहुत मिल गया है - ज़िप/ज़िप) और मैंने उनके समाधानों का पालन करने की कोशिश की है। अब तक, कोई फायदा नहीं हुआ।

मुझे मूल रूप से नियंत्रक में 'roo' की आवश्यकता होती है, और इस त्रुटि को प्राप्त करने के बाद 'ज़िप/ज़िप', 'ज़िप/ज़िपफाइल सिस्टम', और बस 'ज़िप' की आवश्यकता होती है। इनमें से कोई भी कुछ भी ठीक करने लगते हैं। मैंने जोड़ने की भी कोशिश की है: आवश्यकता => 'ज़िप',: आवश्यकता => 'ज़िप/ज़िपफाइल सिस्टम',: = = 'ज़िप/ज़िप' जेमफाइल के लिए आवश्यक है, और इनमें से कोई भी कुछ भी बदलना प्रतीत नहीं होता है।

Gemfile में

:

# for spreadsheet upload management 
gem 'roo' 
gem 'rubyzip' 
gem 'spreadsheet' 
gem 'nokogiri' 

स्थापित संस्करणों:

nokogiri (1.6.0) 
roo (1.12.1) 
rubyzip (1.0.0) 
spreadsheet (0.8.9) 

नियंत्रक में यहाँ कुछ प्रासंगिक कोड है

require 'roo' 

module BatchOrderProcessing 
    class DataFilesController < ApplicationController 

    def create 
     # some code here ... 

     when ".xlsx" 
     spreadsheet = Roo::Excelx.new(uploaded_io.path, nil, :ignore) 
     header = spreadsheet.row(1) 
     if # some validation stuff... 
      puts "spreadsheet format inappropriate" 
      redirect_to # some place 
     end 
     process_datafile(fname, spreadsheet) 
     # more code ... 
    end 

private 

    def process_datafile(fname, spreadsheet) 
    @df = DataFile.new 
    @df[:filename] = ActiveRecord::Base.connection.quote(fname) 

    if @df.save 
     begin 
     # parse asynchronously 
     datafile_scheduler = Rufus::Scheduler.new 

     datafile_scheduler.in '3s' do 
      @df.process_spreadsheet(spreadsheet) 
     end 
     redirect_to @df 
     rescue => e 
     # more code ... 
     end 
    else 
     # more code ... 
    end 
    end 

मुझे लगता है कि इस बात बाहर crapping है इससे पहले कि यह हो जाता है मॉडल (जहां प्रक्रिया_स्प्रेडशीट() कोड है), लेकिन बस मामले में, यहां कुछ मॉडल कोड है:

def process_spreadsheet(spreadsheet) 
    # do some stuff 
    puts "parsing spreadsheet" 
    (2..spreadsheet.last_row).each do |i| 
     row = Hash[[header, spreadsheet.row(i)].transpose] 
     row_array << row 
     invoice << row.to_s 

    # some more code.... 

    dfi = DataFileItem.new() 
    dfi.attributes = row.to_hash.slice(*accessible_attributes) 
    dfi.data_file_id = self.id 
    dfi.save 
    self.data_file_items << dfi 

    # Update stuff in our DB based on rows in row_array... 

end 

मैं रेल 3.2.13 और रूबी 2.0.0p195 का उपयोग कर रहा हूं।

क्या मुझे कहीं गलत चीज़ (या गलत तरीके से) की आवश्यकता है? अगर कोई अन्य कोड स्निपेट उपयोगी होगा तो मुझे बताएं। Thaaaaanks। https://github.com/rubyzip/rubyzip/releases

यह एक नए प्रमुख संस्करण संख्या है, और एक से अधिक मणि या परियोजना है कि इस पर निर्भर करता है पीछे की ओर-संगतता के साथ तोड़ने से बाहर पकड़ा गया है:

+0

क्या आपने कोशिश की है: 'मणि' rubyzip ',' '1.0.0''' आपके 'Gemfile' में? Https://github.com/rubyzip/rubyzip –

+0

पर रीडेम देखें नहीं ... नहीं, मैंने नहीं किया है। और यह मेरे चेहरे में बिल्कुल सही तरह का है। ऐसा लगता है कि मेरी समस्या ठीक है। मेरे पास एक और मुद्दा पॉप अप है, लेकिन यह असंबंधित प्रतीत होता है। यदि आप इसे उत्तर के रूप में फेंक देते हैं तो मैं खुशी से इसे स्वीकार करूंगा। – Deranger

उत्तर

13

rubyzip v1.0.0 29 अगस्त 2013 को जारी किया गया।

तेज ठीक है को बदलने के लिए Gemfile संदर्भ rubyzip "मेरे कोड की तरह से पहले काम करना आरंभ":

gem 'rubyzip', '< 1.0.0' 

लंबी अवधि में, यह सबसे अच्छा ठीक नहीं किया जा सकता है, यह इस पर निर्भर करता है कि कैसे और/या आप rubyzip का उपयोग क्यों कर रहे हैं। मुझे उम्मीद है कि कुछ मणि प्रकाशकों जैसे कि roo के लेखकों को यह समझने की आवश्यकता होगी कि कैसे अच्छी तरह से संक्रमण करना है ताकि उनके उपयोगकर्ता rubyzip के असंगत संस्करणों के लिए एक साथ आवश्यकताओं के साथ समाप्त न हों।


बस राय:

कार्रवाई में यह देखकर वास्तव में मुझे बहुत कम रूबी के एक प्रशंसक जवाहरात प्रमुख संस्करणों के लिए अर्थ संस्करण बना दिया है। अगर मैंने कभी भी अपनी किसी भी परियोजना पर पिछड़ा संगतता तोड़ दी है, तो मुझे लगता है कि मैं सिर्फ एक नया मणि शुरू करूंगा, और पुराने मणि पर एक नोटिस डालूंगा।

+0

बहुत अच्छी व्याख्या। बहुत बहुत धन्यवाद। – Deranger

11

अपनी परियोजना में zip-zip मणि जोड़ने का प्रयास करें। यह RubyZip v0.9.9 इंटरफ़ेस का उपयोग करके आपकी निर्भरताओं के लिए एक सरल एडाप्टर प्रदान करता है जो आपको RubyZip v1.0.0 में अपग्रेड करने की अनुमति देता है।

+0

ओएमजी। मैंने कभी उम्मीद नहीं की है कि यह काम करेगा! लेकिन मैंने कहा, हे, मैं इसे आज़मा दूंगा, और यह काम किया! बहुत बहुत धन्यवाद ओरिएंन! – Aleks

0

यह आरयू मणि में तय किया गया है। आपको ठीक करने के लिए संस्करण 1.12.2 या उच्चतर में अपडेट करने की आवश्यकता है। यहां समस्या देखें: https://github.com/Empact/roo/pull/65

संबंधित मुद्दे