如何在使用RVM时跨所有gemset安装gem

Far*_*han 8 ruby rvm

有没有办法在使用RVM时在系统中的所有红宝石和gemsets(不仅仅是默认或系统ruby)上安装gem?

jma*_*eli 8

你可以执行:

rvm @global do gem install [gem_name]
Run Code Online (Sandbox Code Playgroud)

全局安装gem(每个ruby版本).

每个ruby版本无法全局安装gem .

根据https://rvm.io/gemsets/initial,您可以为文件中的每个ruby版本定义自动安装的gem ~/.rvm/gemsets/global.gems.在此文件中,您需要定义所需的宝石(每行一个),例如

bundler
zeus
Run Code Online (Sandbox Code Playgroud)

每次将新的ruby版本添加到RVM时,都会安装这些gem.


小智 6

您可以安装到每个ruby解释器的默认全局gemset,如下所述:

https://rvm.io/gemsets/global/

此页面还提到了默认的宝石套装

https://rvm.io/gemsets/using/

由于红宝石之间的不兼容性,将gem安装到所有ruby解释器并没有用.


jsi*_*ger 0

浏览 RVM 文档,我没有找到专门执行此操作的方法。但是,您也许可以通过 @global gemsets 和 gemset 复制的组合来近似它。

全局宝石集提供可用于给定红宝石的所有宝石集的宝石。例如:

rvm install 1.9.3
rvm --create 1.9.3@rails3.0
rvm --create 1.9.3@rails3.1
rvm use 1.9.3@global
gem install sqlite3
Run Code Online (Sandbox Code Playgroud)

将为 1.9.3 ruby​​ 创建两个不同的 gemset,并且全局 sqlite3 在两者中都可用。

然后,完成此操作后,您可以将全局宝石集复制到其他红宝石,而他们自己也可以使用它。例如,作为上面的延续:

rvm install 1.8.7
rvm gemset copy 1.9.3@global 1.8.7@global
Run Code Online (Sandbox Code Playgroud)

现在 sqlite3 gem 可用于所有 1.8.7 gemset(假设我已按正确顺序获取参数 - 我可能不会,在这种情况下切换 1.9.3 和 1.8.7)。这不太理想,因为对一个 ruby​​ 的更新不会自动在其他 ruby​​ 中可见,您必须单独复制到每个 ruby​​,而且我想您最终可能会破坏您所拥有的任何依赖于 ruby​​ 的全局 gem各设。不过,如果最后一点不是您预见的问题,您可能可以编写一个脚本来避免前两点所暗示的乏味。

免责声明:这是严格通过阅读 RVM 文档整理而成的,我还没有实际尝试过。如果我有什么问题,我会很乐意编辑答案来修复它。