Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 关于RVM的问题_Ruby On Rails_Ruby_Rvm - Fatal编程技术网

Ruby on rails 关于RVM的问题

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之前安装了

我正在探索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之前安装了rails-v=2.3.5,会发生什么?在RVM的Ruby 1.9.2下是否会安装两个相同的Rails副本

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

问:
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。因此,您需要创建另一个gemset
rails235
,并在其中加载所有2.3.5特定gems,并将
rails3
gemset分开。另一种方法是为您正在使用的每个应用程序创建一个gemset。请参阅我上面对您的问题的更新答案。如果您满意,请接受我的回答。迈克尔,我想rvm不依赖于申请?那不是真的吗?运行bundle install时,从您的注释
中创建一个Gemfile.lock;这本质上是“锁定”应用程序设置为使用的gems。
,但是,我正在考虑运行rvm来创建多个gems集,而不考虑应用程序,因为我将环境更改为该gems集,然后运行
rails