2016-03-29 5 views
0

Я пытаюсь разархивировать файл в моем плагине Spree.NameError - uninitialized constant Zip

Определите способ распаковки в модуле, который выглядит следующим образом.

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 

Я включил драгоценный камень rubyzip в свой Gemfile.

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 

Любое решение для этого?

+0

'камень 'rubyzip', '<1.0.0'' вы попробовали это? –

+0

По-прежнему получает ту же ошибку. Если вы пытаетесь добавить require, я получаю 'не могу загрузить такой файл - zip/zipfilesystem' – Aswathy

+0

https://github.com/rubyzip/rubyzip#important-note вы прочитали это –

ответ

1

Он ищет вложенную константу. Изменить строку Zip::File.open(zip) do |zip_file| ниже:

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

Должно работать. Также убедитесь, что вам требуется rubygem/bundle setup. Хотя в веселье это должно было быть сделано. Ответ

+2

Теперь я получаю 'NameError - uninitialized constant Zip' – Aswathy

2

Бабар является правильным, но вам также нужно добавить require 'zip' в application_controller.rb