1

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

  1. 我是否需要将这些 gem 重新安装到 RVM 中,以便这些 gem 可以在 RVM 控制下?
  2. 如何移植应用程序以使用 RVM gem 而不是系统 gem?
  3. RVM 是 ruby​​ 和 gem 的包装器还是这些 ruby​​ 和 gem 的单独存储库?因此,如果我在 RVM 下安装 gem,则 gem 仅存在于 RVM 中或存在于 RVM 和系统之间,反之亦然。我是在复制还是 RVM 和系统自己同步他们的 gem/系统?

我仍然对 RVM 的商品和用途感到完全困惑。现在,我以前所有无法正常工作的应用程序甚至都没有出现各种错误。

我的环境:Mac OS X 10.8;导轨 3.2.9;文本伴侣

4

1 回答 1

2
  1. 是的。使用捆绑器,不会有任何痛苦。
  2. 它只需要在 RVM 环境中运行。不需要特殊的移植。
  3. 它旨在通过替换 $PATH、$GEM_HOME、$GEM_PATH 等环境变量来为每个项目提供单独的环境。

优点:

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

缺点:

  1. 在 Fish shell 下长时间使用 RVM 时,我遇到了问题。有两次,几周后整个 RVM 都发疯了,然后就坏了。不详述,我必须删除整个~/.rvm目录。在 Bash 下从未发生过。

我使用 RVM 的典型工作流程如下:

  1. 添加ruby "1.9.3"或等效于我的项目的 Gemfiles 以避免使用错误的 Ruby 版本运行它。
  2. 安装 RVM 并安装我需要的 Ruby rvm install 1.9.3,.
  3. 在给定的项目中,rvm use 1.9.3.
  4. 安装所需的 gem。
  5. 正常使用我的应用程序。

请注意我没有使用 Gemsets。这是因为缺点 #1。我真的很喜欢 Fish shell,没有它就活不下去,而且仅使用 bundler 就可以很好地管理宝石(一个问题:心理)。要使用 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以获得体面的教程。

于 2012-11-22T08:23:32.973 回答