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

Ruby Bundler配置在自定义路径中查找gem或从自定义源下载gem,ruby,path,rubygems,bundler,Ruby,Path,Rubygems,Bundler,如何配置bundler,以便在运行bundle install时,它首先在/my/custom/path下查找gem,如果没有找到,则尝试从下托管的ruby gem远程存储库中获取它们https://a.nice.host并将其下载到/local/relative/path(例如相对于cwd)。我想避免捆绑程序查看默认的gem安装系统路径或rubygems.org从本地文件夹查找gem的语法是: gem 'some-gem-name', path: '/my/custom/path' 用于指定

如何配置bundler,以便在运行
bundle install
时,它首先在
/my/custom/path
下查找gem,如果没有找到,则尝试从
下托管的ruby gem远程存储库中获取它们https://a.nice.host
并将其下载到
/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 gemests
,或者使用
bundle install--deployment

但你也问过“先查找本地文件夹,如果不存在,只返回到远程源”。这是一个非常奇怪的要求(通常你只想明确地选择从本地路径获取宝石?!),但要回答这个问题,就像你问的那样

一个
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
如果这个(不寻常的)模式需要在多个地方重复,您可以将其包装到某个助手方法中

有关
捆绑机
配置选项的更多信息,请参阅