2

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 に ruby​​zip gem を含めました。

gem 'rubyzip'
gem 'zip-zip'

実行しようとすると、次のエラーが発生します。

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

stackoverflow や他のサイトで提供されているすべてのソリューションを試しました。現在1.2.0になっているrubyzipのバージョンをダウングレードして、 or を追加してみrequire 'zip'ましrequire 'zip/zip'た。どちらもロードエラーを返しました。

require 'zip/filesystem'クラスに追加してみました。しかし、得た

LoadError - cannot load such file -- zip/zipfilesystem

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

4

3 に答える 3

4

ネストされた定数を探しています。以下の行を変更Zip::File.open(zip) do |zip_file|します。

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

それはうまくいくはずです。rubygem/が必要であることも確認してくださいbundle setup。騒いでいるのに、それはすでに行われているはずです。

于 2016-03-29T07:28:40.070 に答える
3

require 'zip'Babar の答えは正しいですが、application_controller.rbも追加する必要があります。

于 2016-11-27T12:49:53.503 に答える