Rubygems,Bundler和RVM之间的关系

rlk*_*024 29 rubygems ruby-on-rails passenger bundler rvm

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

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

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

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

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

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

Per*_*mal 32

来自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系统/用户路径

  • 如果没有RVM,bundler会将gem安装到gem的默认系统位置(例如/ usr/lib/ruby​​/gems,这是我的Gentoo-box的默认值).RVM通过提供GEM_HOME环境变量告诉Bundler在哪里安装. (5认同)