Heroku,bundler在缺少依赖项时失败

时间:2016-05-01 03:19:59

标签: ruby-on-rails ruby heroku bundler

我最近在尝试在Heroku上部署我的rails应用程序时遇到了麻烦。在过去,我已经在Heroku上部署了应用程序没有问题,但Heroku不再支持ruby 2.0.0了。他们建议将ruby "2.2.4"添加到Gemfile,这就是我所做的。我的Gemfile的开头如下:

source 'https://rubygems.org'
ruby "2.2.4"

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.2.0'
# Use pg as the database for Active Record
gem 'pg'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 5.0'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.1.0'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby
...

所以,我在我的计算机上运行版本为1.7.8的bundle install没有问题。我甚至可以在生产模式下运行我的应用程序。但是,当我尝试在Heroku上部署应用程序时,我得到了这个:

-----> Ruby app detected
-----> Compiling Ruby/Rails
-----> Using Ruby version: ruby-2.2.4
-----> Installing dependencies using bundler 1.11.2
       Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin -j4 --deployment
       Fetching gem metadata from https://rubygems.org/...........
       Fetching version metadata from https://rubygems.org/...
       Fetching dependency metadata from https://rubygems.org/..
       Using rake 10.4.2
       Installing i18n 0.7.0
       Installing minitest 5.4.3
       Installing json 1.8.3 with native extensions
       Installing thread_safe 0.3.4
       Installing builder 3.2.2
       Installing erubis 2.7.0
       Your Gemfile.lock is corrupt. The following gem is missing from the DEPENDENCIES
       section: 'mini_portile2'
       Bundler Output: Fetching gem metadata from https://rubygems.org/...........
       Fetching version metadata from https://rubygems.org/...
       Fetching dependency metadata from https://rubygems.org/..
       Using rake 10.4.2
       Installing i18n 0.7.0
       Installing minitest 5.4.3
       Installing json 1.8.3 with native extensions
       Installing thread_safe 0.3.4
       Installing builder 3.2.2
       Installing erubis 2.7.0
       Your Gemfile.lock is corrupt. The following gem is missing from the DEPENDENCIES
       section: 'mini_portile2'
 !
 !     Failed to install gems via Bundler.
 !
 !     Push rejected, failed to compile Ruby app

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

我建议删除您的Gemfile.lock,在本地再次运行bundle install,将新的Gemfile.lock提交到您的git存储库,然后再次尝试git push heroku master

答案 1 :(得分:0)

我遇到了同样的问题,我所做的是在系统中更新了Ruby 2.2.4并重新启动了终端,然后按照以下步骤操作:

bundle install
bundle update 
git push heroku

(最好使用捆绑更新来更新宝石,以确保版本匹配)

答案 2 :(得分:0)

问题是您只更改了Gemfile中的Ruby版本号,但没有重新创建有效的Gemfile.lock。这导致Gemfile.lock包含与Ruby 2.2.4不兼容的版本中的Gems。

如果您更改Gemfile中的某些内容,则必须在推送到Heroku之前使用相同的Ruby版本更新或重新创建Gemfile.lock

我建议使用Ruby版本管理器(如rbenvRVM),以便能够在开发计算机上运行多个版本的Ruby。然后通过更改Gemfile(对于Heroku)和.ruby-version(对于您的本地环境)中的Ruby版本来更新应用程序中的Ruby版本。两个版本都必须匹配。

完成后,运行bundle install更新Gemfile.lock或(当有重大更新或您只想确保使用最新版本时)运行bundle update重新创建Gemfile.lock