【发布时间】:2013-09-10 15:48:38
【问题描述】:
我正在尝试使用 roo gem 来处理由外部方上传的 .xlsx 电子表格。我收到以下错误:
LoadError(无法加载此类文件 -- zip/zipfilesystem):
我发现了很多与此类似的问题(例如无法加载此类文件 -- zip/zip),并且我尝试遵循他们的解决方案。到目前为止,无济于事。
我最初在控制器中需要“roo”,在收到此错误后尝试需要“zip/zip”、“zip/zipfilesystem”和“zip”。这些似乎都不能解决任何问题。我还尝试将 :require => 'zip', :require => 'zip/zipfilesystem', :require => 'zip/zip' 添加到 Gemfile,但这些似乎都没有改变。这是一些相关的代码:
在 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
我认为这件事在它到达模型之前就已经失效了(process_spreadsheet() 代码所在的位置),但以防万一,这里有一些模型代码:
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
我正在使用 rails 3.2.13 和 ruby 2.0.0p195。
我是否在某处需要错误的东西(或以错误的方式)?让我知道是否有任何其他代码 sn-ps 会有所帮助。太棒了。
【问题讨论】:
-
您是否尝试过:
gem 'rubyzip', '< 1.0.0'在您的Gemfile中?请参阅github.com/rubyzip/rubyzip的自述文件 -
不...不,我没有。这在我的脸上是公然的。看起来这解决了我的问题。我有另一个问题弹出,但它似乎无关。如果您将其作为答案提出来,我会很乐意接受。
标签: ruby-on-rails ruby ruby-on-rails-3 nokogiri rubyzip