繁体   English   中英

Rubygems,Bundler和RVM之间的关系

[英]Relationships between Rubygems, Bundler, and RVM

按照目前的最佳做法,每种方法的作用是什么?

基于我对Bundler和RVM的有限理解,似乎他们 - 像Rubygems - 有自己的宝石安装位置。 另外,对于每一个,都可以选择使用sudo或主目录安装到系统路径。 然后有能力使用Bundler供应宝石(适用时,例如使用Rails)。

所以在我看来现在至少有七个地方可以安装宝石:

  • Rubygems系统路径
  • Rubygems用户路径
  • RVM系统路径
  • RVM用户路径
  • Bundler系统路径
  • Bundler用户路径
  • 供应商(每个应用程序)

那么,管理这一切的最佳方法是什么? 我们是否使用全部三个(Rubygems,Bundler,RVM)并告诉他们所有人将宝石安装到同一个地方? 我们一直在使用sudo还是从不使用sudo 我们是否应该在生产和开发机器上使用不同的策略?

在相关的说明中,围绕Rubygems的Bundler和RVM包装器,它们是它们的替代品,还是它们完全正交?

来自Bundler的网站

Bundler可以轻松确保您的应用程序具有启动和运行所需的依赖项,而不会出现错误。

这意味着,对于其他开发人员或您在另一台计算机上,通过运行bundle install来准备进一步开发或使用它,并且您拥有启动和运行所需的一切,这是微不足道的。

RVM用于在同一台机器上管理多个版本的Ruby,并在它们之间进行切换。 Gemsets是RVM提供的一项强大功能,可将一个应用程序/库的gem与系统的其余部分隔离开来。

当一起使用RVM和Bundler时,RVM告诉Bundler gem应该去哪里,Bundler将它们安装到RVM文件夹中。

两者(关于RVM中的gems)使用并依赖于Rubygems,因此它们最接近包装器。

我个人使用Bundler和RVM来完成我的所有项目。 没有gemsets,只有Bundler来解决和修复问题,它确实没有失败。 安装gems是在没有sudo情况下完成的,最终会在RVM定义的地方完成。 我的系统上的默认Ruby安装是独立的,并且没有任何内容安装到Rubygems系统/用户路径

我现在这样做的方式(虽然仍在尝试一下)是这样的:

  1. 使用RVM设置ruby版本和用于应用程序的gemset。 我在app目录的根目录中使用.rvmrc文件,以确保始终使用正确的ruby和gemset。

  2. 在给定的gemset中使用gem而不使用sudo安装Bundler。

  3. 应用程序所需的任何宝石都会添加到应用程序Gemfile中并使用Bundler进行安装。 我没有使用sudo。

这样我就可以使用Bundler跟踪每个应用程序的依赖关系,并使用RVM将每个应用程序的宝石相互隔离。 实际上工作非常顺利。

我还没有在我的部署服务器上安装RVM,在那里我只使用Bundler来确保处理每个应用程序的依赖。 我可能也会在那里安装RVM,但是必须先弄清楚如何与乘客一起玩。

至于你的上一个问题,Bundler是一个围绕gem的包装器,RVM只是操纵安装了gem的gempath。 它似乎很聪明,它从同一个地方获取宝石,所以我不需要重新编译任何已经安装在其他宝石集中的宝石。

在开始使用RVM之后,我已经停止使用sudo来安装gem。 没有理由只在rvm用户路径中安装它们。 如果你在同一台机器上有更多的开发人员,比如测试服务器或类似的东西,我不确定最佳实践。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM