Ich versuche, den roo gem zu verwenden, um .xlsx-Tabellen zu verarbeiten, die von einer externen Partei hochgeladen werden. Ich erhalte die folgende Fehlermeldung:Rubin auf Schienen roo gem kann nicht geladen werden zip/zipfilesystem
Loaderror (kann nicht geladen werden solche Datei - zip/zipfilesystem):
ich eine Menge Fragen ähnlich wie diese gefunden haben (zB nicht solche Datei laden - zip/zip) und ich habe versucht, ihren Lösungen zu folgen. Bis jetzt, ohne Erfolg.
Ich ursprünglich 'roo' in der Steuerung, und nach diesem Fehler versucht versucht 'zip/zip', 'zip/zipfilesystem', und nur 'zip'. Nichts davon scheint etwas zu reparieren. Ich habe auch versucht hinzuzufügen: require => 'zip',: require => 'zip/zipfilesystem',: require => 'zip/zip' zum Gemfile, und nichts davon schien etwas zu ändern. Hier sind einige relevante Code:
in Gemfile:
# for spreadsheet upload management
gem 'roo'
gem 'rubyzip'
gem 'spreadsheet'
gem 'nokogiri'
installierten Versionen:
nokogiri (1.6.0)
roo (1.12.1)
rubyzip (1.0.0)
spreadsheet (0.8.9)
in Controller:
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
Ich denke, das Ding aus ist crapping bevor es bekommt an das Modell (wo der Code process_spreadsheet() ist), aber nur für den Fall, hier ist ein Modellcode:
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
Ich benutze Schienen 3.2.13 und Ruby 2.0.0p195.
Benötige ich irgendwo das Falsche (oder Falsche)? Lassen Sie mich wissen, ob andere Code-Snippets hilfreich wären. Thaaaaanke.
Haben Sie versucht: 'Gem 'Rubyzip', '<1.0.0'' in Ihrem' Gemfile'? Siehe Readme unter https://github.com/rubyzip/rubyzip –
Nein ... nein habe ich nicht. Und das ist irgendwie direkt in meinem Gesicht. Es sieht so aus, dass das mein Problem behoben hat. Ich habe ein anderes Problem, aber es scheint nicht verwandt zu sein. Wenn Sie das als Antwort aufwerfen, nehme ich es gerne an. – Deranger