2

我正在尝试在我的 Spree 插件中解压缩文件。

在一个看起来像这样的模块中定义了解压缩方法。

module ImportImages
  class Zipper
    def self.unzip(zip, unzip_dir, remove_after = false)
      Zip::File.open(zip) do |zip_file|
        zip_file.each do |f|
          f_path=File.join(unzip_dir, f.name)
          FileUtils.mkdir_p(File.dirname(f_path))
          zip_file.extract(f, f_path) unless File.exist?(f_path)
        end
      end
      FileUtils.rm(zip) if remove_after
    end
  end
end

我在我的 Gemfile 中包含了 ruby​​zip gem。

gem 'rubyzip'
gem 'zip-zip'

尝试运行它时,我收到以下错误。

NameError - uninitialized constant ImportImages::Zipper::Zip:

我已经尝试过 stackoverflow 和其他网站提供的所有解决方案。我尝试降级现在 1.2.0 的 ruby​​zip 版本并添加require 'zip'or require 'zip/zip'. 两者都返回加载错误。

我已经尝试添加require 'zip/filesystem'到课程中。但是得到了

LoadError - cannot load such file -- zip/zipfilesystem

有什么解决办法吗?

4

3 回答 3

5

以这种方式将 ruby​​zip 包含在 gem 文件中:

gem 'rubyzip', require: 'zip'

看到这个问题

于 2017-12-13T10:14:00.760 回答
4

它正在寻找一个嵌套的常量。更改Zip::File.open(zip) do |zip_file|以下行:

::Zip::File.open(zip) do |zip_file|

它应该工作。还要确保您需要rubygem/ bundle setup。虽然在狂欢中应该已经完成​​了。

于 2016-03-29T07:28:40.070 回答
3

Babar的回答是正确的,但是还需要require 'zip'在application_controller.rb中添加

于 2016-11-27T12:49:53.503 回答