有关RVM的问题

时间:2011-09-13 15:49:35

标签: ruby-on-rails ruby rvm

我正在探索Ruby和RVM的世界。我正在阅读大量文档并尝试使用RVM,但我对整个工作流程感到有些困惑。正如我所理解的那样,我正在写下工作流程。有人可以看看,看看这种理解是否正确?

我正在使用Mac。

  • RVM本质上是一个脚本,允许我们为开发目的管理Ruby环境。
  • RVM允许使用rvm use 1.9.2在不同版本的Ruby之间切换。
  • 要使用当前Ruby版本的特定gemset,我们需要使用创建gemset rvm --create gemset rails235
  • 使用gem install rails -v=2.3.5
  • 安装gem
  

问:如果我在创建gemset之前gem install rails -v=2.3.5会发生什么?在RVM的Ruby 1.9.2下是否会安装两个相同Rails的副本?

     

问:如果我在创建gemsets之前安装2.3.5和3.1.0然后为每个版本创建一个gemset会发生什么?

     

问:rvmrc在整个故事中会出现在哪里?

任何其他帮助我做到这一点的信息都非常有帮助。

3 个答案:

答案 0 :(得分:1)

1)Rvm会自动为每个interpeter创建一个@global gemset,所以如果你在第一个问题中做了你所说的话,你在全局gemset中就会得到2.3.5。

2)我不确定你为什么会这样做。

3)rvmrc就是你可以指定环境信息的地方,比如bashrc,我用它来指定我的默认架构。当rvm在您的个人资料中获取时,它会被读取。

答案 1 :(得分:1)

@Kiran,这是参考上面的评论。当您使用rvm安装不同版本的ruby时,它将添加到此列表中:

$ rvm list

rvm rubies

=> ruby-1.9.2-p290 [ i386 ]

在我的系统上,我只运行了一个版本(现在)。这也有帮助

$ rvm gemset list

gemsets for ruby-1.9.2-p290 (found in /Users/mike/.rvm/gems/ruby-1.9.2-p290)
   global
=> mg_diaspora
   rails3
   railscasts
   ruby
   sorcery

这种做法是将常用宝石安装到global宝石集中,并为其他所有内容创建/使用集合。我倾向于将pry和其他人保留在全局gemset中。正如Mike K.所说,你永远不会做#2;如果你做了做了这样的事情,我会想象global具有优先权。

#3 .rvmrc

您可以在文件中执行以下操作:

rvm use 1.9.2@rails3 --create

这将确保无论何时“进入”目录,它都将切换到1.9.2并且它是'rails3'gemset;如果gemset尚不存在,则以下属性可确保创建gemset。

<强>更新

  

例如:如果我说rvm使用1.9.2@rails3 --create如何选择rails3.1.0 gem的版本   因为到创建rails3 gemset时我已经有2个版本的rails gems?

这很简单 - 当你运行bundle install时,它会创建一个Gemfile.lock;这基本上“锁定”应用程序设置使用的gem。你永远不会在一个Gemfile要求两个不同版本的rails - 这只是荒谬的=)

答案 2 :(得分:0)

基本上,global是特定解释器下所有其他gemset的混合。因此,如果您将rake和Bundler放入全局gemset,然后在该特定ruby下创建并启用您自己的gemset,它将同时包含您在该gemset中安装的gem和全局。

你会看到它作为一个宝石集。此外,如果您尝试删除仍处于全局状态的gem,例如mygemset,则无法将其删除。这是为了保护其他宝石免受从它们依赖的全局混入的宝石被移除。您必须明确更改为全局或执行类似

的操作
rvm 1.9.2-p290@global exec gem uninstall rake -v='0.9.2'

另外,请记住'default'和'global'之间存在显着差异。 '默认'宝石集并不是真正的宝石集。当您执行类似

的操作时,会选择此选项
rvm use 1.9.2

请注意,您没有在上面的命令中选择gemset。这是默认生活和玩耍的地方。如果未选择gemset,则默认变为活动状态,全局完全消失。要加载默认值,您可以修改$ rvm_path / gemsets / default.gems,因为这些是要安装到每个解释器的“默认”集合中的gem列表。另一个文件是'global.gems'。这是用你猜测的;每当你在RVM下安装一个新的解释器到全局gemset时加载一组默认的gems,该gemset由该Ruby的所有其他gemset共享,但不是为'default'。

有关详细信息,请参阅https://rvm.beginrescueend.com/gemsets/basics/