RubyGems,Bundler和RVM之间的关系[英] Relationships between Rubygems, Bundler, and RVM

本文是小编为大家收集整理的关于RubyGems,Bundler和RVM之间的关系的处理方法,想解了RubyGems,Bundler和RVM之间的关系的问题怎么解决?RubyGems,Bundler和RVM之间的关系问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

以下最佳实践,其中每个的最佳实践是什么?

基于我对Bundler和RVM的有限理解,似乎他们喜欢RubyGems - 有自己的安装Gems的安装位置.此外,对于每一个,可以选择使用sudo或您的主目录安装到系统路径.然后有能力与Bundler供应商Gems(如适用的地方,例如轨道).

所以它看起来像我现在有至少七个地方才能安装宝石:

  • ruby​​gems系统路径
  • ruby​​gems用户路径
  • RVM系统路径
  • RVM用户路径
  • 捆绑系统路径
  • Bundler用户路径
  • 供应商(每个应用程序)

所以,管理所有这些的最佳方式是什么?我们是否使用三个(RubyGems,Bundler,RVM)并告诉他们所有人将宝石安装到同一个地方?我们一直在使用sudo,其中一些时间,或者永远?我们应该在生产和开发机器上使用不同的策略吗?

在相关说明上,是RubyGems周围的Bundler和RVM包装器,它们是替代方案,还是它们与它完全正交?

推荐答案

来自Bundler的网站:

Bundler使您可以轻松确保您的应用程序具有所需的依赖项,而不会在没有错误的情况下运行.

这意味着某些其他开发人员或您在另一台计算机上的琐碎,以便通过运行bundle install来准备进一步开发或使用它,并且您拥有启动和运行所需的一切.

RVM用于在同一台计算机上管理多个版本的Ruby,并在它们之间切换. Gemsets是一个强大的功能RVM,它可以从系统其余部分隔离一个应用程序/库中的宝石.

在一起使用RVM和Bundler时,RVM告诉Bundler应该去的宝石,并且Bundler将它们安装到RVM-夹中.

(关于RVMS案例中的GEMS)使用并取决于RubyGems,因此它们最接近包装器.

我,个人,使用Bundler和RVM所有项目.没有Gemsets,只是捆绑程序来解决和解决它,它没有失败.在没有sudo的情况下完成安装宝石,并于rvm定义的位置.我系统上的默认Ruby安装是单独留下的,没有安装到RubyGems系统/用户路径

其他推荐答案

现在我的方式(虽然仍然尝试)是:

  1. 使用RVM设置Ruby版本和Gemset用于应用程序.我在app目录的根目录中使用.rvmrc-file来确保所有时间都使用正确的Ruby和Gemset.

  2. Bundler在给定的宝石中使用gem安装gem.

  3. 应用程序所需的任何宝石都添加到Apps GemFile并使用Bundler安装.我不使用sudo.

这种方式我使用Bundler跟踪每个应用程序的依赖关系,以及RVM将每个应用程序的Gem彼此隔离.实际上工作真的很顺利.

我尚未在我的部署服务器上安装RVM,在那里我只使用Bundler确保处理每个应用程序.我可能会在那里安装RVM,但必须弄清楚如何使用乘客玩球.

至于您的最后一个问题,Bundler是Gem周围的包装器,RVM只是操纵了Gems安装的Gempath.它似乎足够聪明,它从同一个地方拿起宝石,所以我不需要重新编译已经安装在一些其他Gemset中的任何东西.

我已经在开始使用RVM后停止使用sudo安装宝石.只需在RVM用户路径中安装它们就没有理由.如果您在同一台计算机上像测试服务器或类似的东西,我不确定最好的实践.

本文地址:https://www.itbaoku.cn/post/786385.html