系统ruby / gem vs RVM ruby​​ / gem

时间:2012-11-22 04:52:23

标签: ruby-on-rails-3 rvm

我安装 RVM ,阅读文档并且不太了解它。例如,我有一个创建并运行的rails应用程序(在我安装RVM之前),它使用系统ruby和system gem。现在我安装RVM后:

  1. 我是否需要将这些宝石重新安装到RVM中,以便这些宝石可以在RVM控制之下?
  2. 如何使应用程序使用RVM gem代替系统gem?
  3. RVM是ruby和gem的包装器还是这些ruby和gem的独立存储库?因此,如果我在RVM下安装gem,则gem仅存在于RVM中或存在于RVM和系统中,反之亦然。我是复制还是RVM和系统自己同步他们的宝石/系统?
  4. 我仍然对RVM的商品和用途感到困惑。现在我以前的所有以前的应用程序都不会以各种错误开始。

    我的环境:Mac OS X 10.8; Rails 3.2.9; TextMate的

1 个答案:

答案 0 :(得分:2)

  1. 是。使用bundler并没有痛苦。
  2. 只需要在RVM环境中运行。无需特殊移植。
  3. 旨在通过替换$ PATH,$ GEM_HOME,$ GEM_PATH等环境变量为每个项目提供单独的环境。
  4. 优点:

    1. 您可以安装不同的ruby解释器以满足您的应用程序的要求。想象一下,你正在使用Rails 1.9.3开始一个新项目,但你仍然在使用1.8.7和1.9.1的旧版本,并且到目前为止尚未移植。
    2. 你的宝石互不冲突。例如,Psych有特殊需求。如果你使用它,你必须在你的所有项目中使用它。但是使用RVM,您可以为每个项目创建不同的gemsets。
    3. 移动gem目录也是dirs,你有读/写访问权限。这很好,因为不会强迫您使用root权限编译gems。
    4. 缺点:

      1. 在Fish shell下长时间使用RVM时遇到问题。两次,几个星期后,整个RVM都疯了,只是破了。不详细说明,我要删除整个~/.rvm目录。在Bash下从未发生过。
      2. 我使用RVM的典型工作流程如下:

        1. ruby "1.9.3"或等效项添加到我的项目的Gemfiles中,以避免使用错误的Ruby版本运行它。
        2. 安装RVM并安装我需要的Rubies,rvm install 1.9.3
        3. 在给定项目中,rvm use 1.9.3
        4. 安装所需的宝石。
        5. 正常使用我的应用程序。
        6. 请注意我没有使用Gemsets。这是因为Cons#1。我真的很喜欢Fish shell,没有它就无法生存,而捆绑者独自给我带来了不错的宝石管理(一个问题:心理)。要使用Gemsets,请在3.和4之间添加两个步骤:

          3A。创建一个rvm gemset create gemset1 3B。使用它rvm use gemset1@1.9.3

          在处理一些遗留项目时,我总是使用RVM。

          请参阅此截屏视频:http://railscasts.com/episodes/200-rails-3-beta-and-rvm获得体面的教程。