gpt4 book ai didi

ruby-on-rails - ruby on rails roo gem 无法加载 zip/zipfilesystem

转载 作者:数据小太阳 更新时间:2023-10-29 06:47:48 29 4
gpt4 key购买 nike

我正在尝试使用 roo gem 来处理由外部方上传的 .xlsx 电子表格。我收到以下错误:

LoadError(无法加载此类文件 -- zip/zipfilesystem):

我发现了很多与此类似的问题(例如无法加载此类文件 -- zip/zip),我尝试按照他们的解决方案进行操作。到目前为止,无济于事。

我最初在 Controller 中需要“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)

在 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

我认为这件事在进入模型之前就已经失败了(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。

我是否在某个地方要求了错误的东西(或以错误的方式)?让我知道是否有任何其他代码片段会有所帮助。 Thaaaaanks。

最佳答案

rubyzip v1.0.0 于 2013 年 8 月 29 日发布:https://github.com/rubyzip/rubyzip/releases

这是一个新的主要版本号,并且依赖于此的不止一个 gem 或项目已被向后兼容性中断所捕获。

最快的“让我的代码像以前一样工作”的修复是改变 Gemfile引用rubyzip :

gem 'rubyzip', '< 1.0.0'

从长远来看,这可能不是最佳解决方案,这取决于您使用 rubyzip 的方式和/或原因。 .我期待一些 gem 出版商,例如 roo的作者需要弄清楚如何很好地过渡,以便他们自己的用户不会同时要求不兼容的版本 rubyzip。 .


只是意见:

实际看到这一点实际上让我不太喜欢主要版本的 Ruby gems 语义版本控制。如果我在我自己的任何项目中打破向后兼容性,我想我会开始一个新的 gem,并在旧的 gem 上放一个通知。

关于ruby-on-rails - ruby on rails roo gem 无法加载 zip/zipfilesystem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18659551/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com