Возможно ли иметь зависимость ветки git, внутри mygem.gemspec?
Я думаю что-то похожее на следующее:
gem.add_runtime_dependency 'oauth2', :git => '[email protected]:lgs/oauth2.git'
... но он не работает.
Возможно ли иметь зависимость ветки git, внутри mygem.gemspec?
Я думаю что-то похожее на следующее:
gem.add_runtime_dependency 'oauth2', :git => '[email protected]:lgs/oauth2.git'
... но он не работает.
Это невозможно, и, вероятно, никогда не будет, потому что RubyGems будет довольно жестко позволять разработчикам гемов требовать, чтобы у пользователей была установлена конкретная система контроля версий для доступа к гему. Драгоценные камни должны быть автономными с минимальным количеством зависимостей, чтобы люди могли использовать их в максимально широком диапазоне приложений.
Если вы хотите сделать это для своих собственных внутренних проектов, я бы предложил использовать Bundler, который достаточно хорошо это поддерживает.
ИЗМЕНИТЬ
По словам комментатора, это уже не так. Предварительная информация сохраняется для исторического контекста.
Дублирование ссылки на жемчужину в Gemfile, и теперь gemspec поднимает предупреждающее сообщение в Bundler, поэтому этот ответ кажется более недействительным.
Устаревшая информация
Я просто пытался понять эту проблему. И я только что придумал следующее решение (которое я не уверен, если вы публикуете свой камень или имеете право перераспределять этот камень oauth2).
В вашем драгоценном камне, для которого требуется oauth2 gem, выполните это.
git submodule add [email protected]:lgs/oauth2.git lib/oauth2
Если вам нужна другая ветка, чем по умолчанию
cd lib/oauth2 && git checkout <branchname_or_ref>
cd .. && git add lib/oauth2
git commit -m "adding outh2 submodule"
В вашем gemspec добавьте это выше вашей строки с требуемой версией
$:.push File.expand_path('../lib/oauth2/lib', __FILE__)
Также вам нужно будет добавить все зависимости от времени выполнения oauth2 gem к вашему gemspec. Я еще не понял пути.
Это то, что я сделал, и это работает для нас, потому что наш драгоценный камень требуется через git, поэтому я не уверен, что это будет работать для опубликованного драгоценного камня rubygems.
Я нашел обходной путь довольно прямо:
Допустим, вы участвуете в проекте P
и хотите использовать самодельный камень tools
, который сам использует камень ОС oauth2
.
Если вы сделали патч в oauth2
и нуждаетесь в этом патче в своем геме tools
, вы не сможете исправить эту проблему в геме в соответствии с принятым ответом.
Однако вы можете указать нужную версию в своем проекте P
Gemfile, и эта версия будет использоваться tools
во время выполнения:
gem 'oauth2', github: 'lgs/oauth2'