为什么我得到无法在任何来源中找到multi_json-1.3.1?

我有一个简单的Rails应用程序,我想部署到Heroku。 当我运行以下命令

git push heroku master 

将显示以下错误消息。

  Could not find multi_json-1.3.1 in any of the sources ! ! Failed to install gems via Bundler. ! ! Heroku push rejected, failed to compile Ruby/rails app 

这是我的Gemfile

  gem 'rails', '3.2.3' gem 'pg' group :assets do gem 'sass-rails', '~> 3.2.3' gem 'coffee-rails', '~> 3.2.1' gem 'therubyracer', :platform => :ruby gem 'uglifier', '>= 1.0.3' end gem 'jquery-rails' 

删除Gemfile.lock文件,然后运行bundle install。 这适合我!

我看到了不同gem的一系列错误,尽管事实上我知道这些gem是可用的(例如gem list -r 显示它们,包括版本;浏览rubygems.org显示我需要的版本就在那里并且没有’被猛拉等)我有一个源集(我甚至设置了6个不同的来源以确定)。

事实certificate我的问题是我在离开function分支之前把git stashed拉开最新的开发并忘记随后弹出存储,这是一个问题,因为我已经更改了我的.rvmrc而没有提交更改(使用更新版本)ruby比我们的生产做的)。

因为我的.rvmrc为项目指定了一个gemset, .rvmrc它意味着我突然捆绑了一个gemset,它在我的Gemfile.lock遗漏了一大堆gem,并且由于我不明白的原因,Bundler假设gem是在Gemfile.lock它已经安装好了,它不能远程查找。

所以,如果其他人面对这个令人难以置信的令人沮丧的角落案件,我想我会在这里写下来。

如果您使用Capistrano进行部署,并且神秘地得到“无法在任何源中找到multi_json-1.7.2”,请确保在config/deploy.rb的顶部require "bundler/capistrano"

就我而言,我缺乏

 source 'https://rubygems.org' 

Gemfile 。 我怀疑旧版本的Bundler可以在没有提到源的情况下运行,但是新版本不能。

对我来说这是因为Pow(本地机架服务器)没有使用正确的RVM ruby​​版本/ gemset。

通过添加以下.powrc

 # based on https://coderwall.com/p/pkj39a if [ -f "$rvm_path/scripts/rvm" ] && [ -f ".ruby-version" ] && [ -f ".ruby-gemset" ]; then source "$rvm_path/scripts/rvm" rvm use `cat .ruby-version`@`cat .ruby-gemset` fi 

资料来源: https : //coderwall.com/p/pkj39a

我通过以下步骤解决了这个问题。

 Removed Gemfile.lock bundle install 

问题的原因最初是我的Gemfile.lock有multi_json-1.3.1

现在它的版本为multi_json-1.3.2