NameError - 未初始化的常量Zip

问题描述 投票:1回答:3

我试图在我的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。

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

对此有何解决方案?

ruby-on-rails ruby zip unzip rubyzip
3个回答
3
投票

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

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

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


3
投票

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


2
投票

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

gem 'rubyzip', require: 'zip'

See this question

© www.soinside.com 2019 - 2024. All rights reserved.