用于在自定义路径中查找 gem 或从自定义源下载的 Bundler 配置

Bundler config to either look for gems in custom path or download from custom source

我如何配置捆绑器,以便当我 运行 bundle install 时,它首先在 /my/custom/path 下查找 gems,如果找不到则尝试从托管在 https://a.nice.host 下的 ruby gem 远程存储库中获取它们并将它们下载到 ./local/relative/path(例如相对于 cwd)。我想避免捆绑器查看默认 gem 安装系统路径或 rubygems.org

从本地文件夹获取 gem 的语法是:

gem 'some-gem-name', path: '/my/custom/path'

指定自定义来源的语法是:

gem 'another-gem-name', source: 'https://a.nice.host'

要将 gems 安装到特定的本地文件夹,您可以 运行:

bundle install --path ./local/relative/path

现在,这就是 可能 你需要的所有工具,事实上......(事实上,特别是对于最后一个要求,你可能希望研究 rvm gemsets, 或使用 bundle install --deployment.)

但是您也确实询问过“先在本地文件夹 中查找,如果远程源不存在则回退”。这是一个很奇怪的要求(通常你只想明确地 选择加入 以从本地路径获取 gems?!),但在你回答这个问题时问过了...

A Gemfile 字面意思就是 ruby 代码!所以你可以定义这个逻辑使用...你猜对了,ruby!例如:

if File.exists?('/my/custom/path')
  gem 'some-gem-name', path: '/my/custom/path'
else
  gem 'some-gem-name', source: 'https://a.nice.host'
end

如果需要在多个地方重复这个(不寻常的)模式,您可以将它包装到一些辅助方法中。

有关bundler配置选项的更多信息,请参阅the documentation