Heroku 上的未定义方法 Zip::ZipOutputStream.write_buffer



我正在制作一个基本的Sinatra应用程序来玩Passbook宝石。

我的应用程序在localhost上运行良好,但是当我尝试在 Heroku 上运行它时,我收到以下错误消息:

/app/vendor/bundle/ruby/2.0.0/gems/passbook-0.2.1/lib/passbook/pkpass.rb:122:in `outputZip'
/app/vendor/bundle/ruby/2.0.0/gems/passbook-0.2.1/lib/passbook/pkpass.rb:60:in `stream'
/app/vendor/bundle/ruby/2.0.0/gems/sinatra-1.4.4/lib/sinatra/base.rb:1593:in `call'
NoMethodError - undefined method `write_buffer' for Zip::ZipOutputStream:Class:

当我在应用程序文件中调用线路passbook.stream.string时,会发生这种情况。

我不认为 Passbook 是这里的问题 - 似乎类方法write_buffer存在于我的本地机器上的 Zip::ZipOutputStream 版本中,但在 Heroku 上不存在。这是为什么呢?我怎样才能绕过它?

我尝试在我的 Gemfile 中同时包含 ziprubyzip,但它们都没有解决问题。

每当我看到这样的事情时,我总是问自己你有开发/生产奇偶校验吗?

所以:

  • 你在本地使用什么Ruby版本,它与你在Heroku上使用的版本有什么不同吗?
  • 您是否在 Gemfile 中指定了 Ruby 版本?
  • 如何在本地运行? 您是否使用bundle exec来确保以相同的方式运行,使用相同的宝石?

终于想通了。

当我运行ruby app.rb时,事情在本地工作,但是当我运行bundle exec ruby app.rb时,我遇到了与在heroku上相同的错误。

我升级到最新版本的存折(今天刚刚更新以处理 rubyzip 的最新更改),但事情仍然不起作用。

事实证明,我需要从我的 Gemfile 中删除gem 'zip'并只包含gem 'rubyzip' - 以前我两者都有。

相关内容

  • 没有找到相关文章

最新更新