在ruby 2.0升级上打破捆绑安装

时间:2013-04-07 23:52:22

标签: ruby bundler ruby-on-rails-4 ruby-2.0

刚升级到ruby 2.0 / rails 4.0并尝试在新的rails项目上运行bundle install。每当它碰到一些尚未安装的东西时,它就会吐出来:

Installing coffee-rails (4.0.0.beta1) 
Errno::ENOENT: No such file or directory - /usr/lib/ruby/gems/2.0.0/build_info/coffee-rails-4.0.0.beta1.info
An error occurred while installing coffee-rails (4.0.0.beta1), and Bundler cannot continue.
Make sure that `gem install coffee-rails -v '4.0.0.beta1'` succeeds before bundling.

然后我运行

gem install coffee-rails -v '4.0.0.beta1'

它安装得很好,我重新运行bundle install,并且每次遇到我尚未安装的gem版本时都必须重复此操作。这有什么问题?

4 个答案:

答案 0 :(得分:8)

在我的情况下,事实证明bundle正在尝试将gems安装到/usr/lib/ruby/gems/2.0.0的全局位置,但由于我没有通过sudo调用它,因此最终出现了权限错误。无论如何我想安装到我的家庭目录所以事实证明我能做到:

GEM_HOME=~/.gem/ruby/2.0.0/ bundle

从此过上幸福的生活。

答案 1 :(得分:4)

bundle可执行文件只是一个shell脚本,它有一个指向特定Ruby可执行文件(或/usr/bin/env ruby)的shebang行。听起来shebang line指的是Ruby的不同版本,而不是2.0版本,而不是gem可执行文件中的shebang行指向的版本。

运行此命令以查看其指向的内容:head -1 $(which bundle)

无论显示哪一行,都要删除#!前缀并使用-v开关运行该行,以查看它的Ruby版本(如果不明显)。因此,如果shebang行是#!/usr/bin/ruby,那么运行/usr/bin/ruby -v如果我的理论是正确的,那么你将获得一个非2.0版本号。

根据您的说法,您的gem可执行文件指向2.0 Ruby,因此这里的修复只是卸载然后重新安装bundler gem。那个应该将正确的Ruby 2.0 shebang行放入你的bundle可执行文件中。

答案 2 :(得分:3)

这解决了我:

sudo gem update --system --no-user-install

来源:https://bbs.archlinux.org/viewtopic.php?id=138650

答案 3 :(得分:0)

将它放在您的Gemfile中,然后运行bundle install。

group :assets do
  gem 'coffee-rails', github: 'rails/coffee-rails'
end