2010-11-20 60 views
11

我在Snow Leopard上手动构建了Ruby 1.9.2。现在我找不到我的旧GEM文件。我猜他们现在或者是在一条不同的路上。所以我有三个问题:当Ruby在Mac OS X 10.6.8中手动编译时,GEM在哪里?

  • 什么是“老”宝石路径,其中gem install sinatra把sinatra宝石?
  • 什么是“新”宝石路径,这是我手动建立Ruby时设置的?
  • 我该如何改变它,让Ruby再次找到我的宝石?

回答

3

我相信标准的宝石在OS X上安装路径是:

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/ 
+0

好的,我该如何迁移这些宝石或告诉Ruby使用旧的路径? – MrB 2010-11-20 13:52:34

+0

其实他们在三个地方。查看我对默认值的回复。 – 2010-11-20 16:49:11

+0

@MrB 1.8以下的许多宝石应该重新安装在1.9以下。 – Phrogz 2010-11-20 22:04:00

32

打字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安装所使用的宝石。

+0

从本地.gem文件安装时,我不确定Rubygem的依赖性行为。您可能需要包含--ignore-dependencies标志以避免从远程源拉取依赖关系(因为大概您本地已经拥有所有必需的依赖关系)。 – 2010-11-20 14:12:46

+1

Windows Gem配置与Snow Leopard不同,因为Apple配置默认位置,并希望自己的宝石,加上用户宝石,以及用户'sudo'宝石。微软不包括Ruby,因此它是确定位置的Windows的Ruby安装程序。 – 2010-11-20 16:51:26

+0

@Greg:无论谁决定安装位置,Rubygems都不知道该位置在哪里?如果我在我的知识领域之外,道歉;我认为Rubygems可以在所有支持的操作系统上工作。 – 2010-11-20 18:31:41

7

您的“旧”宝石将与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。它比手工完成要好得多。