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