当我的 .gemspec 中包含所有 gem 时,如何避免打包程序警告多个来源?
How can I avoid bundlers warning about multiple sources when I have all gems in my .gemspec?
在我自己的 gem 中,我有一个 Gemfile
基本上是这样的:
source 'https://my.gemserver.com'
source 'https://rubygems.org'
gemspec
我的 .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 规范中找不到有关源选项的任何信息。
不,您需要关闭警告或将源代码块添加到您的 Gemfile
中,其中包含您希望来自您的私人服务器的特定 gem。不需要复制来自 rubygems.org
的那些(或者你可以反过来做,如果你依赖比 public 更私有的 gem,并且你的私有 gem 本身并不依赖于 public。
问题是 gemspec
格式不支持为每个 gem 指定来源,因此如果不将它们复制到 Gemfile
,就无法指定哪个来源gem来自每个来源。
有点难过,但必须将它移到 Gemfile :-(
宝石文件:
source 'https://my.gemserver.com' do
your_gem1
your_gem2
#...
end
source 'https://rubygems.org'
gemspec
但是,如果您的某些宝石应该包含在 :development
或 :test
组中,则可以使用以下内容
宝石文件:
your_gem1, :source => 'https://my.gemserver.com'
#...
group :development do
your_gem2, :source => 'https://my.gemserver.com'
#...
end
source 'https://rubygems.org'
gemspec
要详细说明关于 the bundler
issue 的讨论,正如之前的回答所述,您 必须 在 Gemfile
中包含 gem。但是,您只需要在 .gemspec
中指定 gem 的版本。如果您更改版本的频率高于私有依赖项,这不是一个糟糕的解决方案。
引用Gemfile
中没有版本的gem:
# Gemfile
source 'https://rubygems.org'
source 'https://xxx@gem.fury.io/me/' do
gem 'my-private-dependency'
end
gemspec
参考 gem 和 .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
在我自己的 gem 中,我有一个 Gemfile
基本上是这样的:
source 'https://my.gemserver.com'
source 'https://rubygems.org'
gemspec
我的 .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 规范中找不到有关源选项的任何信息。
不,您需要关闭警告或将源代码块添加到您的 Gemfile
中,其中包含您希望来自您的私人服务器的特定 gem。不需要复制来自 rubygems.org
的那些(或者你可以反过来做,如果你依赖比 public 更私有的 gem,并且你的私有 gem 本身并不依赖于 public。
问题是 gemspec
格式不支持为每个 gem 指定来源,因此如果不将它们复制到 Gemfile
,就无法指定哪个来源gem来自每个来源。
有点难过,但必须将它移到 Gemfile :-(
宝石文件:
source 'https://my.gemserver.com' do
your_gem1
your_gem2
#...
end
source 'https://rubygems.org'
gemspec
但是,如果您的某些宝石应该包含在 :development
或 :test
组中,则可以使用以下内容
宝石文件:
your_gem1, :source => 'https://my.gemserver.com'
#...
group :development do
your_gem2, :source => 'https://my.gemserver.com'
#...
end
source 'https://rubygems.org'
gemspec
要详细说明关于 the bundler
issue 的讨论,正如之前的回答所述,您 必须 在 Gemfile
中包含 gem。但是,您只需要在 .gemspec
中指定 gem 的版本。如果您更改版本的频率高于私有依赖项,这不是一个糟糕的解决方案。
引用Gemfile
中没有版本的gem:
# Gemfile
source 'https://rubygems.org'
source 'https://xxx@gem.fury.io/me/' do
gem 'my-private-dependency'
end
gemspec
参考 gem 和 .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