NameError(未初始化的常量Unzipper :: Zip),但仅限于Heroku部署(Rails)
我有一个类unzipper.rb
,它使用Rubyzip解压缩文件。
在我的本地环境中,我可以成功解压缩文件,而不必使用require’zip require 'zip'
明确包含依赖项
但是在Heroku上,我得到一个NameError (uninitialized constant Unzipper::Zip)
,我只能通过使用explict require
来解决
问题:为什么在Heroku环境中这是必要的,而不是在localhost上? 我的印象是Rails自动需要所有gem。
应用程序/服务/ unzipper.rb
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
运行bundler时Heroku输出包括:
remote: Using rubyzip 1.1.7
我validation两者都使用相同版本的Ruby。
Rubyzip没有初始化程序或环境配置。
的Gemfile
source 'https://rubygems.org' gem 'rails', '4.2.0' gem 'pg', group: :production gem 'sass-rails', '~> 5.0' gem 'uglifier', '>= 1.3.0' gem 'coffee-rails', '~> 4.1.0' gem 'jquery-rails' gem 'turbolinks' gem 'jbuilder', '~> 2.0' gem 'sdoc', '~> 0.4.0', group: :doc gem 'slim-rails' gem 'paperclip' gem 'rest-client' gem 'bootstrap-sass', '~> 3.3.3' gem 'validates_serialized' gem 'puma' gem "nokogiri" gem "cocoon" gem 'sidekiq' gem 'sinatra', :require => nil # For sidekiq web monitoring gem 'aws-sdk', ' 2.0' gem 'spring' gem 'sqlite3' gem 'shoulda-matchers' gem 'rspec-rails' gem 'factory_girl_rails' gem 'capybara' gem 'selenium-webdriver' gem 'database_cleaner' gem 'guard-rspec' gem 'faker' end group :test do gem 'webmock' end ruby '2.2.0'
Rubyzip的主文件名与其gem名称不同,因此您可能必须在Gemfile中明确指定它:
gem 'rubyzip', require: 'zip'
- Rails 5 + Webpacker应用程序部署到Heroku作为空白页面,没有失败
- Rails Heroku服务器回形针Amazon S3 – AWS :: S3 :: Errors :: RequestTimeout
- Heroku-无法在任何来源中找到paperclip-3.1.3
- Ruby On Rails Heroku db:migrate Aborted!
- 如何将我的本地数据库复制到heroku?
- 是否有更快的方式从Heroku而不是水龙头中提取生产数据?
- Heroku:您要查找的页面不存在
- 尝试在Windows XP中使用Heroku时找不到msvcrt-ruby18.dll
- Heroku rails 3.1 app – 在本地编译资产与在slug编译期间编译资产