【问题标题】:Undefined method Zip::ZipOutputStream.write_buffer on HerokuHeroku 上未定义的方法 Zip::ZipOutputStream.write_buffer
【发布时间】:2013-10-28 11:04:56
【问题描述】:

我正在制作一个基本的 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 上不存在。为什么是这样?我怎样才能绕过它?

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

【问题讨论】:

    标签: ruby heroku zip sinatra rubyzip


    【解决方案1】:

    每当我看到这样的事情时,我总是问自己Do you have Dev/Prod parity?

    所以:

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

    【讨论】:

    • 原来我在本地使用 ruby​​ 1.9.3,在 Heroku 上使用 2.0.0。解决这个问题并没有解决我的问题。但是当我使用bundle exec 运行我的应用程序时,我在本地遇到了与在 Heroku 上相同的错误!倒退了一步,但它为我提供了有关我认为的错误的更多信息。
    • 非常好 - 很高兴能帮上忙!现在可能取决于 Gemfile 和 Gem 的正确版本等。
    【解决方案2】:

    终于明白了。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-29
      • 1970-01-01
      • 2011-07-25
      • 1970-01-01
      • 1970-01-01
      • 2013-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多