2015-03-10 17 views
11

W moim gem mam Gemfile który wygląda w zasadzie tak:Jak mogę uniknąć pakowania ostrzeżeń o wielu źródłach, gdy mam wszystkie klejnoty w moim pliku .gemspec?

source 'https://my.gemserver.com' 
source 'https://rubygems.org' 

gemspec 

My .gemspec ma wszystkie zależności są wymienione jako add_dependency i add_development_dependency.

Od Bundler 1.8, pojawia się ostrzeżenie:

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`. 

Czy istnieje sposób, aby rozwiązać to ostrzeżenie (bez wyciszenia poprzez wiązki config)? Nie mogę znaleźć nic na temat opcji źródła w specyfikacji Rubygems.

+2

Czy próbowali za pomocą bloku źródłowego jak ten [Przykład] (http: //stackoverflow.com/a/25300592)? –

+2

Chodzi o to, że nie wyliczam zależności gem w Gemfile. Wszystkie są wymienione w .gemspec. Czy muszę je duplikować w Gemfile? Więc o co chodzi z odsyłaniem do gemspec? –

+0

@ChristophPetschnig [tutaj] (http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/) to fajny artykuł na temat ról, które 'Gemfile' i' .gemspec' przytrzymaj. – engineersmnky

Odpowiedz

6

Nie, musisz albo wyciszyć ostrzeżenie, albo dodać blok źródłowy do swojego Gemfile z konkretnymi klejnotami, które chcesz pobrać z prywatnego serwera. Nie ma potrzeby duplikowania tych, które pochodzą z rubygems.org (lub możesz zrobić to na odwrót, jeśli zależy Ci na więcej prywatnych klejnotów niż publicznych, a twoje prywatne klejnoty nie zależą od publicznych).

Problem polega na tym, że format gemspec nie obsługuje określania źródła dla każdego klejnotu, więc bez powielania ich w Gemfile, nie ma możliwości określenia, które klejnoty pochodzą z każdego źródła.

+3

Co to jest błąd, który należy rozwiązać! (imho) – Ich

+0

FYI, dalsza dyskusja na temat tego powodu jest w tym numerze: https://github.com/bundler/bundler/issues/3576 – jwadsack

5

trochę smutne, ale trzeba go przenieść się do Gemfile :-(

Gemfile:

source 'https://my.gemserver.com' do 
    your_gem1 
    your_gem2 
    #... 
end 

source 'https://rubygems.org' 

gemspec 

Ale wtedy, jeśli niektóre perełki powinny być zawarte w :development lub :test grupie Poniżej można wykorzystać

Gemfile:

your_gem1, :source => 'https://my.gemserver.com' 
#... 
group :development do 
    your_gem2, :source => 'https://my.gemserver.com' 
    #... 
end 

source 'https://rubygems.org' 

gemspec 
+0

Ale co z kompilacją klejnotów? Te klejnoty zostaną uwzględnione w wydaniu? –

1

Aby rozwinąć dyskusję na temat the bundler issue, zgodnie z poprzednimi odpowiedziami, musisz musi dołączyć klejnot do ciebie Gemfile. Musisz jednak tylko określić wersję klejnotu w swoim .gemspec. Jeśli zmieniasz wersje częściej niż prywatne zależności, nie jest to straszne rozwiązanie.

referencyjny gem bez wersji w Gemfile:

# Gemfile 
source 'https://rubygems.org' 

source 'https://[email protected]/me/' do 
    gem 'my-private-dependency' 
end 

gemspec 

referencyjny gem ze specyfikacją wersji w .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 
Powiązane problemy