Как я могу избежать уведомления поставщиков о нескольких источниках, когда у меня есть все драгоценные камни в моем .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