我最近在尝试在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
非常感谢任何帮助。
答案 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版本管理器(如rbenv或RVM),以便能够在开发计算机上运行多个版本的Ruby。然后通过更改Gemfile
(对于Heroku)和.ruby-version
(对于您的本地环境)中的Ruby版本来更新应用程序中的Ruby版本。两个版本都必须匹配。
完成后,运行bundle install
更新Gemfile.lock
或(当有重大更新或您只想确保使用最新版本时)运行bundle update
重新创建Gemfile.lock
。