捆绑表演。当我 运行 bundle install 时,gems 安装在哪里?他们只是在我的 Ruby 上吗?

Bundle show. Where are gems installed when I run bundle install? Are they just on my Ruby?

所以我很好奇我的设计 gem 安装在哪里,这样我就可以深入研究设计的源代码。这导致我问 运行 bundle install 时 gem 的安装位置。

所以当我 运行 在我的 rails 应用程序目录中时:

bundle show

Gems included by the bundle:
  * Ascii85 (1.0.2)
  * CFPropertyList (2.3.2)
  * aasm (4.3.0)
  * actionmailer (3.2.22.2)
  * actionpack (3.2.22.2)
  * active_model_serializers (0.8.1)
  * activeadmin (1.0.0.pre2)
  * activemodel (3.2.22.2)
  * activerecord (3.2.22.2)
  * activeresource (3.2.22.2)
  * activesupport (3.2.22.2)
  * activeuuid (0.5.0)
  * acts-as-taggable-on (3.5.0)
  * acts_as_tree (2.2.0)
...
  * devise (3.5.4)

当我运行:

bundle show devise

/Users/jeffrey.wan/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/devise-3.5.4

那条路是什么?它来自哪里?

此外,更重要的问题是,这是否意味着当您 运行 捆绑安装时所有 gem 真的只是安装 您的 Ruby?

2.1.6 和 2.1.0 是什么数字?

Gem 安装将由 Ruby 版本命名空间。因此,如果您使用的是 Rbenv 或 RVM,并且安装了几个不同的 Ruby 版本,运行 gem install 只会为 Ruby 版本安装 gem您当前已选择。

为了回应您的评论,如果您想使用它,除了在本地安装 gem 别无选择。 "Locally" 意思是 "on your computer"。

回答你关于路径的问题:

/Users/jeffrey.wan/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/devise-3.5.4
  1. 您正在使用 rbenv,因此您所有的 ruby 安装都在 ~/.rbenv 目录中命名空间。
  2. 您当前使用的是 ruby 版本 2.1.6,因此您的 gem 正在安装到该文件夹​​
  3. 解释 2.1.0 文件夹 - 基本上当 gem 发布时,它们被精确定位到特定的 Ruby 版本。因此,当您请求将 devise gem 安装到 ruby 2.1.6 时,会选择最匹配的设备(在本例中,是 ruby 2.1 的构建版本。 0).

顺便说一句,当您想要调试已安装的 gem 时,使用 bundle show 有时会很有用。您可以进入源代码并添加断点。这不是我建议经常做的事情,但是当你弄乱旧的、部分功能的 gems 时,它会有所帮助。

顺便说一句,当您安装 gem 时 "on your Ruby",这可能不是最好的措辞。安装 gem 不会修补 Ruby 语言。它所做的只是安装一个库,您可以选择将其包含在您的程序中(通过 require)。一些 gem 也会创建 shell 命令(例如 rake)。