bundler 在哪里存储宝石?

Posted

技术标签:

【中文标题】bundler 在哪里存储宝石?【英文标题】:Where does bundler store gems? 【发布时间】:2012-07-23 00:25:22 【问题描述】:

我知道当使用gem install 时,gem 将存储在 /home/username/.rvm/gems/ 下,gem 安装在哪个 gemset 下。

但是如果我使用 Bundler 并在 Gemfile 中指定 gem,当我运行 bundle install 时,这些 gem 将存储在哪里?如果我已经使用gem install 安装了gem,如果我运行bundle install,它会使用之前使用gem install 安装的gem 吗?

【问题讨论】:

bundle show <gemname> Bundler 现在显示“[已弃用] 使用 bundle info <gemname> 而不是 bundle show <gemname>”。 【参考方案1】:

请注意,gem 也会安装到“Gem 路径”中的 bundle 文件夹中(请参阅:bundle env)。例如,从git 安装的 gem 会发生这种情况:

gem 'my-gem', git: "https://github.com/x/y.git"

我认为这是为了避免自定义安装与来自 gem 服务器的安装发生冲突。

【讨论】:

【参考方案2】:

我使用bundle config path 来查看宝石的存储位置。

【讨论】:

【参考方案3】:

如果您想找出特定 gem 的存储位置,可以运行 bundle info <gem-name>。例如:

user@host$ bundle info rake
/var/bundle/ruby/2.1.0/gems/rake-10.4.2

对于旧版本的 rake,命令可以是 bundle show <gem_name>.

【讨论】:

这是否意味着所有的 gem 都安装在你的 ruby​​ 上? 请注意,bundle show GEM 已弃用,取而代之的是 bundle info GEM【参考方案4】:

这取决于。在通常的开发设置中,当您“正常”安装 gem 时(通过运行gem install foo),它们会安装在它们所在的位置,并且捆绑程序不会重新安装已经存在的 gem。该位置取决于 ruby​​gems 本身的配置方式。

如果您使用 --deployment 选项运行捆绑安装,那么 gem 将安装在您的应用所特有的位置(您可以将其作为单独的选项传递,但默认为供应商/捆绑包)

您还可以运行 bundle package 将您的应用使用的所有 .gem 文件存储在 vendor/cache 中。运行 bundle install 会更喜欢 vendor/cache 中的 gem 而不是其他位置的 gem。

【讨论】:

也可以将安装路径作为参数指定给bundle install:$ bundle install --path vendor/bundle 我没看懂答案,那么 bundle install 的默认安装路径是什么?如果在开发中使用。 在开发中,它会将它们安装在与 gem install 相同的位置(取决于 GEM_HOME、GEM_PATH 等) 那么,默认情况下,它会将所有 gem 安装在系统范围(而不是特定于项目)的位置? @David 它可以是系统范围或用户特定位置,具体取决于 ruby​​gems 配置。【参考方案5】:

这里是/usr/local/lib/ruby/gems/2.1.0/gems/,这里是:/usr/local/lib/ruby/gems/2.1.0/bundler/gems/

【讨论】:

我想这仅适用于某些操作系统 你知道 bundler 是如何决定哪些 gem 放在哪个目录中的吗?

以上是关于bundler 在哪里存储宝石?的主要内容,如果未能解决你的问题,请参考以下文章

Rails bundler 不会在组内安装 gem

Bundler 找不到 gem "bundle" 的兼容版本

bundler 如何在 vendor/bundle/bin 和 vendor/bundle/ruby/2.6.0/bin 之间进行选择?

使用 bundler,如何解压通过 git 存储库安装的 gem?

Error-Bundler 找不到 gem“bundle”的兼容版本:在 Heroku 上推送项目时

在本地存储和安装ruby gems用于ruby项目