【问题标题】:rubyzip - cannot load such file -- ziprubyzip - 无法加载此类文件 - zip
【发布时间】:2013-07-30 20:44:29
【问题描述】:

我正在尝试使用 ruby​​zip 在我的应用程序中动态创建 zip 存档。我使用their readme 作为起点。我将 gem 添加到我的 Gemfile 中:

gem 'rubyzip'

然后运行bundle install 并重新启动rails 服务器。

我的控制器代码是:

require 'rubygems'
require 'zip'

filename = "#{Time.now.strftime('%y%m%d%H%M%S')}"
input_filenames = ["#{filename}.txt"]
zip_filename = "#{filename}.zip"

Zip::File.open(zip_filename, Zip::File::CREATE) do |zipfile|
  input_filenames.each do |f|
    zipfile.add(f, directory + '/' + f)
  end
end

我得到的错误是:cannot load such file -- zip

我试过require 'zip/zip',但它产生了同样的错误。

提前致谢!

【问题讨论】:

  • 不要require 'rubygems',bundler 会帮你搞定的。
  • 不幸的是,没有。注释掉 require 'zip' 会给我 uninitialized constant ... ::Zip 错误。
  • 你还需要require "zip"(顺便说一句,你使用的是什么版本的rubyzip?)

标签: ruby-on-rails rubyzip


【解决方案1】:

您可能正在查看一个太新的示例。

如果你使用Rubyzip 0.9.x,那么你需要关注this example

require "zip/zip",然后用Zip::ZipFile代替Zip::File

require 'zip/zip'

folder = "Users/me/Desktop/stuff_to_zip"
input_filenames = ['image.jpg', 'description.txt', 'stats.csv']

zipfile_name = "/Users/me/Desktop/archive.zip"

Zip::ZipFile.open(zipfile_name, Zip::ZipFile::CREATE) do |zipfile|
  input_filenames.each do |filename|
    # Two arguments:
    # - The name of the file as it will appear in the archive
    # - The original file, including the path to find it
    zipfile.add(filename, folder + '/' + filename)
  end
end

【讨论】:

  • 太棒了!这非常有效。我正在使用 0.9.9。非常感谢您的帮助。
  • 看起来 gem 文档已经过时了,b/c 他们有 Zip::File.open(zipfile_name, Zip::File::CREATE) do |zipfile| 但在查看源代码后,Zip::ZipFile... 是正确的。我会让他们知道的。
【解决方案2】:

我建议你使用:

gem 'rubyzip',  "~> 1.1", require: 'zip'

然后你的控制器中的require 'zip' 应该可以正常工作。

【讨论】:

  • 别忘了重启你的服务器。
【解决方案3】:

rubyzip 的接口已更改。你用的是旧版本。来自 master 分支的 ruby​​doc.info 文档。

【讨论】:

    猜你喜欢
    • 2012-08-18
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 2016-11-20
    • 2023-03-10
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多