Gemsets

如果你正在使用 RVM(Ruby Version Manager),那么为每个项目使用 gemset 是个好主意。gemset 只是一个容器,可以用来保持宝石彼此分开。每个项目创建一个 gemset 允许你为一个项目更改 gems(和 gem 版本),而不会破坏所有其他项目。每个项目只需要担心自己的宝石。

RVM 为每个红宝石翻译提供(> = 0.1.8)@global gemset。你为 @global gemset 安装给定 ruby 的宝石可用于你与该 ruby 关联创建的所有其他 gemset。这是允许所有项目共享特定 ruby 解释器安装的相同已安装 gem 的好方法。

创建 gemsets

假设你已经安装了 ruby-2.3.1 并且已使用此命令选择它:

rvm use ruby-2.3.1

现在为这个 ruby 版本创建 gemset:

rvm gemset create new_gemset

其中 new_gemset 是 gemset 的名称。要查看 ruby 版本的可用 gemset 列表:

rvm gemset list

列出所有 ruby 版本的宝石:

rvm gemset list_all

使用列表中的 gemset(假设 new_gemset 是我想要使用的 gemset):

rvm gemset use new_gemset

如果你想转换到其他一些 ruby 版本,你也可以使用 gemset 指定 ruby 版本:

rvm use ruby-2.1.1@new_gemset

为特定的 ruby 版本指定默认 gemset:

rvm use 2.1.1@new_gemset --default

要从 gemset 中删除所有已安装的 gem,你可以将其清空:

rvm gemset empty new_gemset

要将 gemset 从一个 ruby 复制到另一个 ruby,你可以通过以下方式完成:

rvm gemset copy 2.1.1@rails4 2.1.2@rails4

删除 gemset:

rvm gemset delete new_gemset

查看当前的宝石名称:

rvm gemset name

在全局 gemset 中安装 gem:

rvm @global do gem install ...

在 Ruby 安装期间初始化 Gemsets

当你安装新的 ruby 时,RVM 不仅会创建两个 gemset(默认的,空的 gemset 和全局 gemset),还会使用一组用户可编辑的文件来确定要安装的 gem。

~/.rvm/gemsets 工作时,rvm 使用基于正在安装的 ruby 字符串的树形层来搜索 global.gemsdefault.gems。使用 ree-1.8.7-p2010.02 的示例,rvm 将检查(并从中导入)以下文件:

~/.rvm/gemsets/ree/1.8.7/p2010.02/global.gems
~/.rvm/gemsets/ree/1.8.7/p2010.02/default.gems
~/.rvm/gemsets/ree/1.8.7/global.gems
~/.rvm/gemsets/ree/1.8.7/default.gems
~/.rvm/gemsets/ree/global.gems
~/.rvm/gemsets/ree/default.gems
~/.rvm/gemsets/global.gems
~/.rvm/gemsets/default.gems

例如,如果你通过添加以下两行来编辑~/.rvm/gemsets/global.gems

bundler
awesome_print

每次安装新的 ruby 时,这两个宝石都会安装到你的全局 gemset 中。在更新 rvm 期间,通常会覆盖 default.gemsglobal.gems 文件。