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。该位置取决于 rubygems 本身的配置方式。
如果您使用 --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 它可以是系统范围或用户特定位置,具体取决于 rubygems 配置。【参考方案5】:
这里是/usr/local/lib/ruby/gems/2.1.0/gems/
,这里是:/usr/local/lib/ruby/gems/2.1.0/bundler/gems/
。
【讨论】:
我想这仅适用于某些操作系统 你知道 bundler 是如何决定哪些 gem 放在哪个目录中的吗?以上是关于bundler 在哪里存储宝石?的主要内容,如果未能解决你的问题,请参考以下文章
Bundler 找不到 gem "bundle" 的兼容版本
bundler 如何在 vendor/bundle/bin 和 vendor/bundle/ruby/2.6.0/bin 之间进行选择?
使用 bundler,如何解压通过 git 存储库安装的 gem?