【问题标题】:System ruby/gem vs RVM ruby/gem系统 ruby​​/gem 与 RVM ruby​​/gem
【发布时间】:2012-11-24 00:28:51
【问题描述】:

我安装了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 和 System 自己同步了他们的 gem/系统?

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

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

【问题讨论】:

  • 对否决票发表评论?我已经使用 Rails 工作了 5 年来提出这个我需要回答的问题。还是我会因为质疑 RVM 而被否决?

标签: ruby-on-rails-3 rvm


【解决方案1】:
  1. 是的。使用bundler,就不会痛了。
  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 并安装我需要的 Rubies,rvm install 1.9.3
  3. 在给定项目中,rvm use 1.9.3
  4. 安装所需的 gem。
  5. 正常使用我的应用。

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

【讨论】:

  • 当我切换到 fish 时,我也开始使用 rbenv。没问题,如果你使用 Bundler,那么 gemsets 也没有问题。
  • @ŁukaszNiemier – 感谢您的评论,我使用 fish+rbenv 半年了,我对它非常满意。有一些问题,但here 提供的提示有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-17
  • 2012-07-17
  • 2012-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多