2016-03-29 15 views
0

私はSpreeプラグインでファイルを解凍しようとしています。NameError - 初期化されていない定数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 

私は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 

これに対する解決策はありますか?

+0

'宝石 'rubyzip' '<1.0.0''これを試しましたか? –

+0

まだ同じエラーが発生しています。もしrequireを追加しようとすると、 'そのようなファイルを読み込めません - zip/zipfilesystem' – Aswathy

+0

https://github.com/rubyzip/rubyzip#important-noteこれを読んだか –

答えて

1

ネストしたConstantを探しています。 Zip::File.open(zip) do |zip_file|を次のように変更してください。

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

これは動作するはずです。 また、rubygem/bundle setupが必要です。たとえそれがすでに終わったはずですが、

+2

今は 'NameError - 初期化されていない定数Zip' – Aswathy

2

ババールの答えが正しいですが、あなたはまた、application_controller.rb

0

require 'zip'を追加する必要があるが、このように宝石のファイルにrubyzipを含める:

gem 'rubyzip', require: 'zip' 

See this question

関連する問題