मैं बाहरी पार्टी द्वारा अपलोड की गई .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
यह एक नए प्रमुख संस्करण संख्या है, और एक से अधिक मणि या परियोजना है कि इस पर निर्भर करता है पीछे की ओर-संगतता के साथ तोड़ने से बाहर पकड़ा गया है:
क्या आपने कोशिश की है: 'मणि' rubyzip ',' '1.0.0''' आपके 'Gemfile' में? Https://github.com/rubyzip/rubyzip –
पर रीडेम देखें नहीं ... नहीं, मैंने नहीं किया है। और यह मेरे चेहरे में बिल्कुल सही तरह का है। ऐसा लगता है कि मेरी समस्या ठीक है। मेरे पास एक और मुद्दा पॉप अप है, लेकिन यह असंबंधित प्रतीत होता है। यदि आप इसे उत्तर के रूप में फेंक देते हैं तो मैं खुशी से इसे स्वीकार करूंगा। – Deranger