我在Snow Leopard上手动构建了Ruby 1.9.2。现在我找不到我的旧GEM文件。我猜他们现在或者是在一条不同的路上。所以我有三个问题:当Ruby在Mac OS X 10.6.8中手动编译时,GEM在哪里?
- 什么是“老”宝石路径,其中
gem install sinatra
把sinatra宝石? - 什么是“新”宝石路径,这是我手动建立Ruby时设置的?
- 我该如何改变它,让Ruby再次找到我的宝石?
我在Snow Leopard上手动构建了Ruby 1.9.2。现在我找不到我的旧GEM文件。我猜他们现在或者是在一条不同的路上。所以我有三个问题:当Ruby在Mac OS X 10.6.8中手动编译时,GEM在哪里?
gem install sinatra
把sinatra宝石?我相信标准的宝石在OS X上安装路径是:
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/
打字gem env
(使用旧的红宝石安装的gem命令)在命令提示符处得到类似的东西:
> RubyGems Environment:
> - RUBYGEMS VERSION: 1.3.6
> - RUBY VERSION: 1.9.1 (2009-07-16 patchlevel 243) [i386-mingw32]
> - INSTALLATION DIRECTORY: C:/Ruby19/lib/ruby/gems/1.9.1
> - RUBY EXECUTABLE: C:/Ruby19/bin/ruby.exe
> - EXECUTABLE DIRECTORY: C:/Ruby19/bin
> - RUBYGEMS PLATFORMS:
> - ruby
> - x86-mingw32
> - GEM PATHS:
> - C:/Ruby19/lib/ruby/gems/1.9.1
> - C:/Users/Username/.gem/ruby/1.9.1
> - GEM CONFIGURATION:
> - :update_sources => true
> - :verbose => true
> - :benchmark => false
> - :backtrace => false
> - :bulk_threshold => 1000
> - REMOTE SOURCES:
> - http://rubygems.org/
(在Windows上...我想象雪豹会有类似的格式)
GEM PATHS字段是int在这里消遣的东西。如果您转至列出的这些目录,则应该看到名为缓存的文件夹。这将包含与该特定目录中所有安装的gem相对应的.gem文件列表。您应该可以在每个这些gem文件上使用gem install *gemname*
(使用您的新的 Ruby安装的gem命令)。
编辑:错误地提到安装目录而不是GEM PATHS。 Greg提醒我,Rubygems的特定安装有多个位置。所有这些位置都需要检查Ruby安装所使用的宝石。
从本地.gem文件安装时,我不确定Rubygem的依赖性行为。您可能需要包含--ignore-dependencies标志以避免从远程源拉取依赖关系(因为大概您本地已经拥有所有必需的依赖关系)。 – 2010-11-20 14:12:46
Windows Gem配置与Snow Leopard不同,因为Apple配置默认位置,并希望自己的宝石,加上用户宝石,以及用户'sudo'宝石。微软不包括Ruby,因此它是确定位置的Windows的Ruby安装程序。 – 2010-11-20 16:51:26
@Greg:无论谁决定安装位置,Rubygems都不知道该位置在哪里?如果我在我的知识领域之外,道歉;我认为Rubygems可以在所有支持的操作系统上工作。 – 2010-11-20 18:31:41
您的“旧”宝石将与Mac捆绑在一起的Ruby相关,因为gem
命令包含在Snow Leopard中的Ruby 1.8.7中。如果您which ruby
显示/usr/bin/ruby
,你的宝石的环境应该是类似于:
- GEM PATHS:
- /Library/Ruby/Gems/1.8
- /Users/greg/.gem/ruby/1.8
- /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8
如果您正在使用RVM你可能能够将其从system
宝石告诉copy your gems一个RVM的控制之下。我没有试过这样做,因为我立即安装了RVM,让它处理我所有的Ruby安装,然后忽略系统的安装。
如果您的which ruby
显示为/usr/local/bin/ruby
那么gem env
命令应反映从源代码编译的版本的已更改路径。
我很好奇,为什么你手动将它建立,当RVM
可用来处理所有的configuration and installation,并在很大程度上删除有关其中事情,以及是否你刚刚踩在系统安装的版本有任何疑问。
当RVM安装了一个Ruby版本时,它将全部位于~/.rvm
,您的Gems也将在那里很好地定位。相对于每个Ruby版本,您可以将manage the gems设为gemsets,并立即切换。或者,更好的是,您可以在安装的每个Ruby版本中运行一个命令/程序,以使用rvm ruby 'some command'
进行测试。
请注意,在上面的gem env
输出中,宝石位于磁盘上的三个独立区域。在RVM的控制他们在RVM的沙箱:
- GEM PATHS:
- /Users/greg/.rvm/gems/ruby-1.9.2-p0
- /Users/greg/.rvm/gems/[email protected]
这使得它琐碎,我给他们备份,或打击他们离开,如果我想。
我曾经在我的Mac和Linux机器上从源代码编译我的红宝石。我现在使用RVM。它比手工完成要好得多。
好的,我该如何迁移这些宝石或告诉Ruby使用旧的路径? – MrB 2010-11-20 13:52:34
其实他们在三个地方。查看我对默认值的回复。 – 2010-11-20 16:49:11
@MrB 1.8以下的许多宝石应该重新安装在1.9以下。 – Phrogz 2010-11-20 22:04:00