RVM Gemsets和Ruby Gemfile混淆

Jos*_*h C 6 ruby gem rvm gemfile

有人请帮助我了解一个ruby应用程序如何管理应用程序的gemfile和rvm gemsets.如果我目前正在使用Gemset,有一堆已安装的宝石,而且我的gemfile中也有宝石,那么Ruby应用程序是使用gemfile中的gem还是应用程序的gemset?

Mir*_*cea 4

要理解这一点,您需要退后一步并了解红宝石宝石的一般工作原理。
让我们从一个没有 rvm 或 Gemfile 的系统开始。
当您通过“gem install”安装 gem 时,它会进入系统 gem 位置。
每当您编写 ruby​​ 脚本并需要 gem 时,都会从那里获取它。

现在假设您需要为不同的项目使用不同版本的 gem。这就是捆绑器的用武之地。您创建一个 Gemfile,当您“捆绑安装”时,Gemfile 中列出的 gem 将被引入并在该项目的上下文中使用。您需要执行“bundle install”将它们引入,然后“bundle exec ruby​​”才能与 gem 版本一起运行。您可以拥有多个 gem 版本并选择要使用的版本。如果您不通过捆绑程序,您将使用系统中的任何内容。

现在RVM。假设您想以有组织的方式更改“系统”gem 和 ruby​​ 版本。这基本上就是 RVM gemset 的本质。通过路径间接的魔力,您可以为不同的 gem 集安装 gem,并假装它们是系统 gem。

所以 gemsets 和 gemfiles 是相互正交的。如果您使用 gem 文件,gems 将安装在 gem 集中,但如果您使用捆绑程序,您通常不会关心这一点。

通常您会想要使用 Gemfile。