2015-03-10 3 views
11

मेरे अपने मणि में, मैं एक Gemfile है कि इस तरह मूल रूप से दिखता है:जब मैं अपने .gemspec में सभी रत्न रखता हूं तो मैं कई स्रोतों के बारे में चेतावनी से बच सकता हूं?

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

gemspec 

मेरे .gemspecadd_dependency और add_development_dependency के रूप में सूचीबद्ध सभी निर्भरता है। (बंडल config के माध्यम से म्यूट करने के बिना)

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

वहाँ इस चेतावनी को हल करने का कोई तरीका है:

Bundler 1.8 के रूप में, मैं चेतावनी मिलती है? मुझे Rubygems विनिर्देश में स्रोत विकल्प के बारे में कुछ भी नहीं मिला।

+2

आप इस [उदाहरण] (http की तरह एक स्रोत ब्लॉक का उपयोग करने की कोशिश की है: //stackoverflow.com/a/25300592)? –

+2

बात यह है कि, मैं Gemfile में अपने मणि निर्भरताओं की सूची नहीं है। वे सभी .gemspec में सूचीबद्ध हैं। क्या मुझे उन्हें Gemfile में डुप्लिकेट करना है? तो gemspec का जिक्र करने का क्या मतलब है? –

+0

@ क्रिस्टोफपेत्सिनिग [यहां] (http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/) भूमिकाओं पर एक अच्छा लेख है जो 'जेमफाइल' और ' .gemspec 'पकड़ो। – engineersmnky

उत्तर

6

नहीं, आपको या तो अपने निजी सर्वर से आने वाले विशिष्ट रत्नों के साथ चेतावनी को म्यूट करने या Gemfile पर स्रोत ब्लॉक जोड़ने की आवश्यकता होगी। rubygems.org से आने वाले लोगों को डुप्लिकेट करने की आवश्यकता नहीं है (या यदि आप सार्वजनिक लोगों की तुलना में अधिक निजी रत्नों पर निर्भर करते हैं, तो आप इसे अन्य तरीकों से कर सकते हैं, और आपके निजी रत्न स्वयं सार्वजनिक पर निर्भर नहीं होते हैं)।

समस्या यह है कि gemspec प्रारूप में प्रत्येक मणि के लिए स्रोत निर्दिष्ट करने के लिए कोई समर्थन नहीं है, इसलिए उन्हें Gemfile में डुप्लिकेट किए बिना, यह निर्दिष्ट करने का कोई तरीका नहीं है कि कौन से रत्न प्रत्येक स्रोत से आते हैं।

+3

कौन सा बग है जिसे संबोधित किया जाना चाहिए! (imho) – Ich

+0

एफवाईआई, इसके कारण के बारे में और चर्चा इस मुद्दे में है: https://github.com/bundler/bundler/issues/3576 – jwadsack

5

दुख की बात का प्रकार, लेकिन एक :-(

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 
+0

लेकिन मणि संकलन के बारे में क्या? इस रत्न को रिलीज में शामिल किया जाएगा? –

1

the bundler issue पर चर्चा पर विस्तृत करने के लिए, जैसा कि पिछले उत्तरों ने कहा है, आप में 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 
संबंधित मुद्दे

 संबंधित मुद्दे