使用 PostgreSQL 的 Heroku 在初始推送构建应用程序时失败,这是怎么回事?

Heroku using PostgreSQL is failing on initial push to build application, what's the deal?

我会尽可能详细,但这个问题很奇怪。

我一直在 Ruby Rails 2.1.0 和 Heroku 上工作,将更改推送到商业应用程序,我被指示创建一个测试环境而不是使用 public 环境(可以理解。我认为一切都会很稳固,我所要做的就是创建一个新的应用程序,推送源代码,然后恢复运行——这不是那么简单。已经将近 2 天了重建我的 VM 和验证 RVM 版本无济于事。

这是错误:

Total 1093 (delta 259), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote: 
remote: -----> Ruby app detected
remote: -----> Compiling Ruby/Rails
remote:  !
remote:  !     An error occurred while installing Ruby ruby-2.1.0
remote:  !     For supported Ruby versions see https://devcenter.heroku.com/articles   /ruby-support#supported-runtimes
remote:  !     Note: Only the most recent version of Ruby 2.1 is supported on Cedar-14
remote:  !     Command: 'set -o pipefail; curl --fail --retry 3 --retry-delay 1 --connect-timeout 3 --max-time 30 https://s3-external-1.amazonaws.com/heroku-buildpack-ruby/cedar-14/ruby-2.1.0.tgz -s -o - | tar zxf - ' failed unexpectedly:
remote:  !     
remote:  !     gzip: stdin: unexpected end of file
remote:  !     tar: Child returned status 1
remote:  !     tar: Error is not recoverable: exiting now
remote:  !
remote: 
remote:  !     Push rejected, failed to compile Ruby app
remote: 
remote: Verifying deploy...

现在是有趣的部分,没有任何改变,我确保不要搞砸 gem 文件,或任何其他问题(Gemfile 说 ruby '2.1.0',只是fyi),然后我连接到 public 环境中的另一个应用程序,而不是我的测试环境和 BAM。有效。

remote: Compressing source files... done.
remote: Building source:
remote: 
remote: -----> Ruby app detected
remote: -----> Compiling Ruby/Rails
remote: -----> Using Ruby version: ruby-2.1.0
remote: -----> Installing dependencies using 1.6.3
remote:        Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin -j4 --deployment
remote:        Using i18n 0.6.9
remote:        Using multi_json 1.8.4
remote:        Using minitest 4.7.5
remote:        Using atomic 1.1.14
remote:        Using builder 3.1.4
remote:        Using tzinfo 0.3.38
remote:        Using erubis 2.7.0
remote:        Using rack 1.5.2
remote:        Using polyglot 0.3.4
remote:        Using mime-types 1.25.1
remote:        Using activerecord-deprecated_finders 1.0.3
remote:        Using arel 4.0.2
remote:        Using american_date 1.1.0
remote:        Using rake 10.1.1
remote:        Using coffee-script-source 1.7.0
remote:        Using bcrypt-ruby 3.1.2
remote:        Using thor 0.18.1
remote:        Using execjs 2.0.2
remote:        Using hike 1.2.3
remote:        Using libv8 3.16.14.3
remote:        Using json 1.8.1
remote:        Using orm_adapter 0.5.0
remote:        Using mini_portile 0.6.0
remote:        Using bundler 1.6.3
remote:        Using pg 0.17.1
remote:        Using tilt 1.4.1
remote:        Using remotipart 1.2.1
remote:        Using sass 3.2.14
remote:        Using ref 1.0.5
remote:        Using rack-test 0.6.2
remote:        Using warden 1.2.3
remote:        Using treetop 1.4.15
remote:        Using coffee-script 2.2.0
remote:        Using rdoc 4.1.1
remote:        Using thread_safe 0.1.3
remote:        Using uglifier 2.4.0
remote:        Using sprockets 2.10.1
remote:        Using therubyracer 0.12.1
remote:        Using nokogiri 1.6.2.1
remote:        Using mail 2.5.4
remote:        Using sdoc 0.4.0
remote:        Using activesupport 4.0.2
remote:        Using actionpack 4.0.2
remote:        Using jbuilder 1.5.3
remote:        Using climate_control 0.0.3
remote:        Using railties 4.0.2
remote:        Using activemodel 4.0.2
remote:        Using actionmailer 4.0.2
remote:        Using sprockets-rails 2.0.1
remote:        Using cocaine 0.5.3
remote:        Using activerecord 4.0.2
remote:        Using paperclip 3.5.4
remote:        Using coffee-rails 4.0.1
remote:        Using devise 3.2.2
remote:        Using jquery-rails 3.1.0
remote:        Using sass-rails 4.0.1
remote:        Using turbolinks 2.2.1
remote:        Using rails 4.0.2
remote:        Using twitter-bootstrap-rails 2.2.8
remote:        Your bundle is complete!

我的问题是,这怎么会发生?我的系统上没有任何改变,我不确定要改变什么才能正确部署到测试环境。任何 tips/tricks/advice 将不胜感激,谢谢。

An error occurred while installing Ruby ruby-2.1.0

For supported Ruby versions see https://devcenter.heroku.com/articles/ruby-support#supported-runtimes

Note: Only the most recent version of Ruby 2.1 is supported on Cedar-14

that page:

MRI:
* 1.8.7 : patchlevel 376, Rubygems : 1.8.24 (Not supported on cedar-14)
* 1.9.2 : patchlevel 327, Rubygems: 1.3.7.1 (Not supported on cedar-14)
* 1.9.3 : patchlevel 551, Rubygems : 1.8.23.2
* 2.0.0 : patchlevel 598, Rubygems : 2.0.14
* 2.1.5 : patchlevel 265, Rubygems: : 2.2.2
* 2.2.0 : patchlevel 0, Rubygems: ; 2.4.5

否 Ruby 2.1.0。据我所知,你总是得到你指定的 Ruby 的最新补丁级别,但是 Ruby 改变了它在 2.1 中版本自身的方式。您将拥有 Ruby 2.1.1、2.1.2 等,而不是 1.9.3p598、p600 和 p700 等。所以现在,由于您在 Gemfile 中放置了如此具体的版本,它会拒绝它,因为它是过时了。

它应该像更新 Gemfile 一样简单以具有 ruby '2.1.5'

错误w.r.t。 heroku 支持的 ruby 版本似乎仅在创建新应用程序时才会提升;不是在推送到现有应用程序时。

如果把测试环境的ruby版本改成ruby 2.1.5,就可以完美运行了。

关于为 heroku 应用程序设置测试环境的主题,请查看 https://devcenter.heroku.com/articles/multiple-environments;它讨论了如何设置一个与具有相同代码库的生产应用程序链接的暂存环境。