2016-03-29 5 views
0

Ich versuche, eine Datei in meinem Spree-Plugin zu entpacken.NameError - nicht initialisierte Konstante Zip

Definiert die Entpackungsmethode in einem Modul, das so aussieht.

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 

Ich habe das Rubyzip Juwel in meine Gemfile aufgenommen.

gem 'rubyzip' 
gem 'zip-zip' 

Beim Versuch, es auszuführen, erhalte ich den folgenden Fehler.

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

Ich habe versucht jede Lösung in Stackoverflow und anderen Websites zur Verfügung gestellt. Ich habe versucht, die Version von Rubyzip, die jetzt 1.2.0 ist, herunterzustufen und require 'zip' oder require 'zip/zip' hinzuzufügen. Beide haben einen Ladefehler zurückgegeben.

Ich habe versucht, require 'zip/filesystem' der Klasse hinzuzufügen. Aber hat

LoadError - cannot load such file -- zip/zipfilesystem 

Jede Lösung für diese?

+0

'gem 'rubyzip', '<1.0.0'' hast du das versucht? –

+0

Immer noch der gleiche Fehler. Wenn ich versuche, hinzuzufügen erfordern, bekomme ich 'kann nicht laden solche Datei - zip/zipfilesystem' – Aswathy

+0

https://github.com/rubyzip/rubyzip#important-note haben Sie dies gelesen –

Antwort

1

Es ist auf der Suche nach einer verschachtelten Konstante. Ändern Sie Zeile Zip::File.open(zip) do |zip_file| mit unter:

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

sollte es funktionieren. Stellen Sie außerdem sicher, dass Sie rubygem/bundle setup benötigen. Obwohl in spree sollte es schon getan worden sein.

+2

Jetzt bekomme ich 'NameError - nicht initialisierte Konstante Zip' – Aswathy

2

Babars Antwort ist richtig, aber Sie müssen auch require 'zip' in hinzufügen application_controller.rb