Конфигурация пакета для поиска драгоценных камней в пользовательском пути или загрузки из пользовательского источника

#ruby #path #rubygems #bundler

Вопрос:

Как мне настроить bundler так, чтобы при запуске bundle install он сначала искал драгоценные /my/custom/path камни в разделе, а если он их там не найдет, то попытался извлечь их из удаленного репозитория ruby gem, размещенного в разделе https://a.nice.host , и загрузил их в ./local/relative/path (относительно cwd , например). Я бы хотел, чтобы комплектующий не смотрел на gem системный путь установки по умолчанию или rubygems.org

Ответ №1:

Синтаксис для поиска драгоценного камня из локальной папки таков:

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

И синтаксис для указания пользовательского источника таков:

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

И чтобы установить драгоценные камни в определенную локальную папку, вы можете запустить:

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

По правде говоря, это, вероятно, все инструменты, которые вам нужны… (И на самом деле, особенно для этого последнего требования, вы можете вместо этого захотеть изучить rvm gemsets или использовать bundle install --deployment .)

Но вы также спрашивали о том, чтобы «сначала заглянуть в локальную папку и вернуться к удаленному источнику только в том случае, если он не существует». Это довольно странное требование (обычно вы хотите только явно подписаться на извлечение драгоценных камней из локального пути?!), Но ответить на этот вопрос так, как вы его задали…

A Gemfile -это буквально просто код 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 , пожалуйста, ознакомьтесь с документацией.