Rubygems,Bundler和RVM混淆

在再次询问之前,我读了“ Rubygems,Bundler和RVM之间的关系 ”。

好吧,这样的问题很多,但是回答的人说他们和Rubygems,RVM和Bundler一起工作,他们没有解释每个工作是如何独立的。

当我们安装gem的时候,我真的很困惑,三个人是如何孤立地工作的。 请不要告诉我你是如何工作的,这对我有帮助,但是当我们和他们一起玩时,我不知道发生了什么。

我的困惑可以分解成这些问题。 在以下情况下安装的gem在哪里?

  1. 我只有Rubygems(没有RVM或Bundler)?
  2. Rubygems和RVM安装?
  3. Rubygems,RVM和Bundler是否安装?

请通过networking上的资源或详细的答案来帮助我理解这些内容。

  1. 要找出安装的gem的位置,在terminal中运行echo $GEM_HOME
  2. 在使用RVM时,在更改$ GEM_HOME时,gem会安装到您的RVM安装中。 现在运行echo $GEM_HOME会在你的RVM安装中显示一个path。
  3. 当Bundler添加到混合中时,gem将被安装在$GEM_HOME ,或者如果在运行bundle install时指定了一个path,它将被安装到该path中。 要通过Bundlerfindgem的位置,您可以使用bundle show gemname来获取其完整path。

使用gem env列出每个上下文中的gempath。

没有RVM gem env会报告系统gem库的path。

使用RVM gem env将报告RVMpipe理的gem库path。

Bundlerpipe理应用程序依赖关系并安装到您的环境中的gem库中。 如果您使用RVM + Bundler,那么gem将安装在RVMpipe理的gem目录中。 如果你在没有RVM的情况下使用它,bundler会在系统的gem目录下安装gems。

要find安装gem的path,请使用:

 gem which gem_name 

要find可执行文件(如html2haml)使用:

 which executable_name 

为了避免inputBundler团队推荐的bundle exec html2haml ,使用我的rubygems-bundler gem。

我也试图了解它是如何工作的。 博客“ 关于在开发中使用Ruby,RVM,Passenger,Rails,Bundler,…的build议 ”帮助我更好地概览。

顺便说一句,这是一个法国文章的翻译,法文版更好。