1

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

我的应用程序在 上运行良好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 上不存在。为什么是这样?我怎样才能绕过它?

我已经尝试将两者都包含ziprubyzip我的 Gemfile 中,单独和同时包含,但它们都没有解决问题。

4

2 回答 2

1

每当我看到这样的事情时,我总是问自己你有 Dev/Prod 平价吗?.

所以:

  • 您在本地使用什么 Ruby 版本,它与您在 Heroku 上使用的有什么不同?
  • 您是否在 Gemfile 中指定了 Ruby 版本?
  • 在本地怎么跑?您是否使用bundle exec相同的宝石来确保以相同的方式运行?
于 2013-10-28T14:22:25.687 回答
0

终于想通了。

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

我升级到最新版本的存折(今天刚刚更新以处理对 ruby​​zip 的最新更改),但仍然无法正常工作。

原来我需要gem 'zip'从我的 Gemfile 中删除并只包含gem 'rubyzip'- 以前我两者都有。

于 2013-10-29T04:23:42.840 回答