我最近使用RVM将Ruby从1.8.3更新到2.0.0。更新成功了,我可以在命令行中运行2.0.0就好了。
问题是,我开始研究使用Compass / Sass gem的项目,当我尝试从shell运行compass watch
命令时,我收到了这个错误:
/Library/Ruby/Site/1.8/rubygems/dependency.rb:298:in `to_specs': Could not find 'compass' (>= 0) among 7 total gem(s) (Gem::LoadError)
from /Library/Ruby/Site/1.8/rubygems/dependency.rb:309:in `to_spec'
from /Library/Ruby/Site/1.8/rubygems/core_ext/kernel_gem.rb:53:in `gem'
from /usr/bin/compass:22
我的Ruby原始版本存储了我在这里安装的所有宝石:
/Library/Ruby/Gems
但是RVM更新到2.0.0会将宝石列为保存在这里:
/Users/Jim/.rvm/gems/ruby-2.0.0-p481@global/gems
如何让RVM更新原始gem,以便我可以将它与我当前版本的Ruby一起使用?这是否需要我在我依赖指南针的项目上重新安装宝石?
我在rvm.io上阅读了很多文档,并认为'rvm gemset update'可以正常工作。我也试过'rvm do gemset update'和'rvm all do gemset update'但是它找不到旧的宝石。
有没有人有想法如何将RVM指向我的旧宝石,并让它将它们更新为2.0.0可以使用的宝石集?
答案 0 :(得分:3)
试试这个:
/usr/bin/gem list --no-version > ~/Desktop/old_gems
xargs gem install < ~/Desktop/old_gems
第一个命令将告诉旧gem
列出与旧Ruby相关联的宝石,而不包含其版本号,这些宝石将作为&#34; old_gems&#34;存储在桌面上。
第二个命令告诉xargs
告诉新gem
安装&#34;〜/ Desktop / old_gems&#34;中列出的宝石。 xargs
如果有太多的宝石可以放在命令行上,gem
就不会让/Library/Ruby/Site/1.8
不知所措。
当我安装新版本的Ruby时,我使用了一个非常类似的方法,需要有一套原始的宝石来陪伴它。
第一个命令抛出一个未初始化的常量错误......
...
--no-version
...
问题可能是由于Ruby的年龄问题。 1.8已经很老了,多年来一直被弃用,结果,我怀疑gem并不知道/usr/bin/gem list | awk '{print $1}' > ~/Desktop/old_gems
xargs gem install < ~/Desktop/old_gems
标志。相反,试试这个:
rvm use system
我找到了rvm使用系统命令......
嗯......你真的很聪明,花时间阅读the RVM documentation所以你知道这个工具做了什么。 {{1}}是其最基本的命令之一,也是使用RVM或rbenv等沙箱的主要原因。见&#34; Setting the default Ruby&#34;对于那些信息。
此外,您必须掌握RVM版本以便修复错误,并且可以使用新版本的Ruby,这一点非常重要。见&#34; Upgrading RVM&#34;如何做到这一点。
最后,每当您需要知道Ruby / RVM生态系统中的位置时,请使用rvm info
。
答案 1 :(得分:1)
如果您使用的是bundler和Gemfile,那么您不应该遇到这种问题。实际上,使用Bundler和Gemfile的好处是帮助确保正在处理项目的其他人也可以安装相同的gem。
/ Library / Ruby / Gems文件夹很可能来自系统安装,而不是您的宝石的RVM安装。
我相信这就是为什么你没有找到与你的经验相匹配的文档,因为你的先前配置似乎是基于Ruby的系统安装,而不是使用RVM设置的项目。
您将有几个选项来纠正这个问题,但我建议使用Gemfile,并使用Bundler来帮助管理您的项目。
答案 2 :(得分:1)
鉴于您的系统设置,您似乎已经在Mac上并想要在学习RVM之前更新您安装的现有宝石。
我最好的建议是使用以下内容获取原始宝石列表。
/usr/bin/gem list
如果您不想逐个安装它们,请尝试使用此代码: http://www.krzywanski.net/archives/451
无论如何,对于最新版本,一个小红宝石代码也可以做到这一点。 ;)$ /usr/bin/gem list | ruby -ne 'puts("gem install #{$_.chomp.split[0]}")' > ~/oldgems.sh
$ chmod +x ~/oldgems.sh && cd
$ ./oldgems.sh