Ruby on rails 关于RVM的问题
我正在探索Ruby和RVM的世界。我正在阅读大量文档并尝试RVM,但我对整个工作流程有点困惑。我正在写下我理解的工作流程。有人能看一下这个理解是否正确吗 我用的是Mac电脑Ruby on rails 关于RVM的问题,ruby-on-rails,ruby,rvm,Ruby On Rails,Ruby,Rvm,我正在探索Ruby和RVM的世界。我正在阅读大量文档并尝试RVM,但我对整个工作流程有点困惑。我正在写下我理解的工作流程。有人能看一下这个理解是否正确吗 我用的是Mac电脑 RVM本质上是一个脚本,它允许我们为开发目的管理Ruby环境 RVM允许使用RVM use 1.9.2在不同版本的Ruby之间切换 要在当前Ruby版本中使用特定的gemset,我们需要使用 rvm——创建gemset rails235 使用gem安装导轨-v=2.3.5安装gem 问:如果我在创建gemset之前安装了
- RVM本质上是一个脚本,它允许我们为开发目的管理Ruby环境
- RVM允许使用
在不同版本的Ruby之间切换RVM use 1.9.2
- 要在当前Ruby版本中使用特定的gemset,我们需要使用
rvm——创建gemset rails235
- 使用
gem安装导轨-v=2.3.5安装gem
rvmrc
在整个故事中从何而来
任何其他有助于我理解这一点的信息都非常有用。1)Rvm会自动为每个interpeter创建一个@global gemset,因此,如果您按照第一个问题中的说明进行操作,则全局gemset中会有一个2.3.5
2) 我不知道你为什么要这样做
3) rvmrc就是您可以指定环境信息的地方,比如bashrc,我使用它来指定默认的体系结构。当rvm在您的个人资料中获得来源时,它会被读取。@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
实践是将通用gems安装到您的global
gems集中,并为其他所有内容创建/使用gems集。我倾向于把pry
和其他人放在全球gemeset中。正如Mike K.所说,你永远不会这样做;如果你做了这样的事,我会想象global
拥有优先权
#3.rvmrc
您可以在文件中执行以下操作:
rvm use 1.9.2@rails3 --create
这将确保每当您将“cd”放入目录时,它将切换到1.9.2,并且它是“rails3”gemset;以下属性确保在gemset不存在时创建gemset
更新
如果我说rvm使用1.9。2@rails3--创建如何选择rails3.1.0 gem的版本
因为在创建rails3 gems集时,我已经有了2个版本的rails gems
这很简单-当您运行
bundle install
时,它会创建一个Gemfile.lock
;这本质上“锁定”了应用程序要使用的宝石。你从来没有在一个Gemfile
文件中需要两个不同版本的rails,这太荒谬了=)基本上,global是所有其他gemset在特定解释器下的混合体。因此,如果您将rake和say bundler放入全局gemset,然后在特定的ruby下创建并启用您自己的gemset,它将同时拥有您在该gemset和全局gemset中安装的gems
不过,你会把它看作一颗宝石。此外,如果您试图删除一个仍在全局中的gem,例如mygemeset,您将无法删除它。这是为了保护其他宝石,防止它们所依赖的全球宝石被移除。您必须显式地更改为全局或执行类似的操作
rvm 1.9.2-p290@global exec gem uninstall rake -v='0.9.2'
rvm use 1.9.2
此外,请记住,“默认”和“全局”之间存在显著差异。“默认”gemset不是真正的gemset perse。当您执行以下操作时,将选中此选项
rvm 1.9.2-p290@global exec gem uninstall rake -v='0.9.2'
rvm use 1.9.2
请注意,您没有在上述命令中选择gemset。这就是默认值存在和发挥作用的地方。如果未选择任何gemset,则默认设置将变为活动状态,全局设置将完全消失。要加载默认值,您需要修改$rvm_path/gemests/default.gems,因为这些是要安装到每个解释器的“默认”集中的gems列表。另一个文件是“global.gems”。正如你所猜测的那样,这是被使用的;在您将RVM下的新解释器安装到全局gemset时加载一组默认的gems,该全局gemset由该Ruby的所有其他gemset共享,但不用于“default”
有关更多信息,请参阅。对于2,这是我在开始探索时所做的,但尚未发现rvm。而且,一旦完成了这项工作,就无法找到在rails版本之间进行干净切换的方法。现在,我删除了所有安装并重新开始,但不确定这种方法还会出什么问题@Kiran,每个rails版本都会有一套完全不同的gemeset=)Michael,谢谢你的解释。这就是我感到困惑的地方。如果我为rails2.3.5和rails3.1.0进行了全局gem安装,我现在如何创建gems,以便它们可以引用特定于项目的rails gem版本?例:如果我说
rvm,请使用1.9。2@rails3--创建
这如何选择rails3.1.0 gem的版本?因为在创建rails3 gems集时,我已经有了2个版本的rails gems?ThxI倾向于为我正在使用的任何版本的rails设置gemest。因此,您需要创建另一个gemsetrails235
,并在其中加载所有2.3.5特定gems,并将rails3
gemset分开。另一种方法是为您正在使用的每个应用程序创建一个gemset。请参阅我上面对您的问题的更新答案。如果您满意,请接受我的回答。迈克尔,我想rvm不依赖于申请?那不是真的吗?运行bundle install时,从您的注释中创建一个Gemfile.lock;这本质上是“锁定”应用程序设置为使用的gems。
,但是,我正在考虑运行rvm来创建多个gems集,而不考虑应用程序,因为我将环境更改为该gems集,然后运行rails