我正在探索Ruby和RVM的世界。我正在阅读大量文档并尝试使用RVM,但我对整个工作流程感到有些困惑。正如我所理解的那样,我正在写下工作流程。有人可以看看,看看这种理解是否正确?
我正在使用Mac。
rvm use 1.9.2
在不同版本的Ruby之间切换。rvm --create gemset rails235
gem install rails -v=2.3.5
问:如果我在创建gemset之前
gem install rails -v=2.3.5
会发生什么?在RVM的Ruby 1.9.2下是否会安装两个相同Rails的副本?问:如果我在创建gemsets之前安装2.3.5和3.1.0然后为每个版本创建一个gemset会发生什么?
问:
rvmrc
在整个故事中会出现在哪里?
任何其他帮助我做到这一点的信息都非常有帮助。
答案 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'。