NameError-未初始化常量Zip



我正在尝试解压缩我的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中包含了rubyzip宝石。

gem 'rubyzip'
gem 'zip-zip'

当尝试运行它时,我得到了以下错误。

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

我已经尝试了stackoverflow和其他网站提供的每一种解决方案。我尝试降级rubyzip的版本,现在是1.2.0,并添加require 'zip'require 'zip/zip'。两者都返回了加载错误。

我已尝试将require 'zip/filesystem'添加到类中。但得到

LoadError - cannot load such file -- zip/zipfilesystem

有什么解决方案吗?

以这种方式在gem文件中包含rubyzip:

gem 'rubyzip', require: 'zip'

请参阅此问题

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

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

它应该起作用。还要确保您需要rubygem/bundle setup。尽管在疯狂中,它应该已经完成了。

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

相关内容

  • 没有找到相关文章

最新更新