Как я могу избежать уведомления поставщиков о нескольких источниках, когда у меня есть все драгоценные камни в моем .gemspec?
В моем собственном камне у меня есть Gemfile
, который выглядит в основном следующим образом:
source 'https://my.gemserver.com'
source 'https://rubygems.org'
gemspec
My .gemspec
имеет все зависимости, перечисленные как add_dependency
и add_development_dependency
.
Как и у Bundler 1.8, я получаю предупреждение:
Warning: this Gemfile contains multiple primary sources. Using `source` more than
once without a block is a security risk, and may result in installing unexpected gems.
To resolve this warning, use a block to indicate which gems should come from the
secondary source. To upgrade this warning to an error,
run `bundle config disable_multisource true`.
Есть ли способ разрешить это предупреждение (без отключения через конфигурацию пакета)? Я не могу найти ничего об исходном параметре в спецификации Rubygems.
Ответы
Ответ 1
Нет, вам нужно либо отключить предупреждение, либо добавить исходный блок в Gemfile
с конкретными камнями, которые вы хотите получить с вашего личного сервера. Нет необходимости дублировать те, которые поступают из rubygems.org
(или вы могли бы сделать это наоборот, если вы зависите от более частных драгоценных камней, чем от обычных, а ваши частные драгоценные камни сами по себе не зависят от общедоступных).
Проблема заключается в том, что формат gemspec
не поддерживает указание источника для каждого драгоценного камня, поэтому, не дублируя их в Gemfile
, нет способа указать, какие драгоценные камни поступают из каждого источника.
Ответ 2
Грустно, но нужно переместить его в Gemfile: - (
Gemfile:
source 'https://my.gemserver.com' do
your_gem1
your_gem2
#...
end
source 'https://rubygems.org'
gemspec
но затем, если некоторые из ваших драгоценных камней должны быть включены в группу :development
или :test
, следующие могут быть использованы
Gemfile:
your_gem1, :source => 'https://my.gemserver.com'
#...
group :development do
your_gem2, :source => 'https://my.gemserver.com'
#...
end
source 'https://rubygems.org'
gemspec
Ответ 3
Чтобы подробно обсудить обсуждение проблемы bundler
, как указывали предыдущие ответы, вы должны включить в себя драгоценный камень Gemfile
. Однако вам нужно указать версию драгоценного камня в .gemspec
. Если вы меняете версии чаще, чем частные зависимости, это не ужасное решение.
Ссылка на драгоценный камень без версии в Gemfile
:
# Gemfile
source 'https://rubygems.org'
source 'https://[email protected]/me/' do
gem 'my-private-dependency'
end
gemspec
Ссылка на драгоценный камень со спецификацией версии в .gemspec
:
# my-gem.gemspec
lib = File.expand_path('../lib', __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
Gem::Specification.new do |spec|
spec.add_dependency 'my-private-dependency', '~> 0.1.5'
end