我有一个简单的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'
答案 0 :(得分:25)
删除Gemfile.lock文件,然后运行bundle install。 这对我有用!
答案 1 :(得分:1)
我看到了不同宝石的一系列错误,尽管我知道这些宝石可用(例如gem list -r <gem>
显示它们,包括版本;浏览rubygems.org显示我需要的版本就在那里并且没有& #39;被猛拉等)我有一个源集(我甚至设置了6个不同的来源以确定)。
事实证明我的问题是我在离开功能分支之前已经git stashed
拉出最新的开发并忘记随后弹出存储,这是一个问题,因为我已经更改了我的.rvmrc
和没有做出改变(使用比我们的生产更新的红宝石)。
因为我的.rvmrc
为项目指定了一个宝石集,所以存储它意味着我突然捆绑了一个宝石集,在我的Gemfile.lock
中遗漏了一大堆宝石,原因是我没有&#39;了解Bundler假设gem已经安装在Gemfile.lock
中,并且它没有远程查找。
所以,如果其他人面对这个令人难以置信的令人沮丧的角落案件,我想我会在这里写下来。
答案 2 :(得分:1)
如果您使用Capistrano进行部署并且神秘地获得“无法在任何来源中找到multi_json-1.7.2”,请确保require "bundler/capistrano"
位于config/deploy.rb
的顶部
答案 3 :(得分:0)
就我而言,我缺乏
source 'https://rubygems.org'
Gemfile
中的。我怀疑捆绑器的旧版本可以在没有提到源的情况下运行,但是新版本不能。
答案 4 :(得分:0)
对我来说,这是因为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
答案 5 :(得分:-1)
我已通过以下步骤解决了这个问题。
Removed Gemfile.lock
bundle install
问题的原因最初是我的Gemfile.lock有multi_json-1.3.1
现在它的版本为multi_json-1.3.2