我有一个使用Rubyzip解压缩文件的类var s
。
在我的本地环境中,我可以成功解压缩文件,而无需使用unzipper.rb
在Heroku上,我得到require 'zip'
,我只能使用明确NameError (uninitialized constant Unzipper::Zip)
问题:为什么在Heroku环境中这是必要的,而不是在localhost上?我的印象是Rails自动需要所有宝石。
应用/服务/ unzipper.rb
require
运行bundler时的Heroku输出包括:
require 'zip' # Only required for Heroku. Works locally without!
class Unzipper
OVERRIDE_FILES = true
def initialize(file)
@file = file
end
def self.unzip(file, &block)
Unzipper.new(file).unzip(&block)
end
def unzip
open_zip do |zip|
yield extract_files(zip)
end
end
private
def open_zip(&block)
::Zip::File.open(@file.path, &block)
end
def extract_files(zip)
files = []
zip.each do |entry|
path = "#{rails_temp_directory}/#{entry.name}"
entry.extract(path) { OVERRIDE_FILES }
files << path
end
files
end
def rails_temp_directory
"#{Rails.root}/tmp"
end
end
我确认两者都使用相同版本的Ruby。
Rubyzip没有初始化程序或环境配置。
的Gemfile
remote: Using rubyzip 1.1.7
答案 0 :(得分:11)
Rubyzip的主文件名与其gem名称不同,因此您可能必须在Gemfile中明确指定它:
gem 'rubyzip', require: 'zip'