2011-06-27 16 views
71

क्या mygem.gemspec के अंदर गिट शाखा निर्भरता संभव है?रूबी जेम्सस्पेक निर्भरता: क्या संभव है कि गिट शाखा निर्भरता हो?

मैं निम्न जैसा कुछ सोच रहा हूँ:

gem.add_runtime_dependency 'oauth2', :git => '[email protected]:lgs/oauth2.git' 

... लेकिन यह काम नहीं करता।

+0

मैं इस एक ही मुद्दा है, सिवाय इसके कि मैं एक पथ निर्भरता, नहीं एक Git निर्भरता चाहते हैं। क्या इस तरह से किसी भी तरह से पाने का कोई तरीका नहीं है? शायद gemspec में कुछ हैकिश रूबी कोड चिपके हुए कहीं? – Ajedi32

उत्तर

37

यह संभव नहीं है, और संभवतः ऐसा कभी नहीं होगा क्योंकि रूबीजम्स के लिए यह भारी हाथ होगा ताकि मणि डेवलपर्स को यह आवश्यक हो सके कि उपयोगकर्ताओं के पास एक मणि तक पहुंचने के लिए एक विशिष्ट संस्करण नियंत्रण प्रणाली स्थापित हो। रत्नों को कम से कम निर्भरताओं के साथ आत्मनिर्भर होना चाहिए ताकि लोग उन्हें यथासंभव व्यापक रूप से आवेदन की सरणी में उपयोग कर सकें।

आप अपने खुद के आंतरिक परियोजनाओं के लिए ऐसा करना चाहते हैं, तो मेरे सुझाव जो बहुत अच्छी तरह से इस का समर्थन करता है Bundler उपयोग करने के लिए किया जाएगा।

+12

... हाँ, लेकिन मैं इसे कैसे कर सकता हूं? –

+0

मैं एक मणि (omniauth) जो वास्तव में कई अन्य लोगों, फैराडे और OAuth2 की तरह है, जो दोनों एक पुराने फैराडे (0.6.1) ओर इशारा करते हैं फिर से बंडल बंडल। मैं उस नेस्टेड निर्भरता को खत्म करने की कोशिश कर रहा था ... –

+6

आप इसे जैसा सुझाव देते हैं, लेकिन जेमफाइल में करते हैं। यदि कोई स्पष्ट oauth2 आवश्यकता नहीं है, तो इसे जोड़ें ("मणि 'oauth2',: git => '....' '), और बंडल इंस्टॉल करें। – gtd

12

संपादित

एक टिप्पणीकार के अनुसार, इस नहीं रह गया है सच है। ऐतिहासिक संदर्भ के लिए पहले की जानकारी बरकरार रखी गई।

Gemfile और .gemspec में एक मणि के संदर्भ को डुप्लिकेट करना अब बंडलर में एक चेतावनी संदेश उठाना प्रतीत होता है, इसलिए यह उत्तर अब सत्य नहीं होगा।

पुराने जानकारी

This लेख Yehuda Katz द्वारा मेरे लिए समान भ्रम को मंजूरी दे दी। यह कहता है कि, केवल विकास में उपयोग के लिए, गिटफाइल में गिट सामान को जोड़ना सबसे अच्छा है, लेकिन वह बंडलर अभी भी रत्नपेक से निर्भरता/संस्करण जानकारी का उपयोग करेगा (मुझे जादुई लगता है, लेकिन मुझे येहुदा पर भरोसा है)।

+3

इसके बारे में इतना जादुई क्या है? बंडलर केवल जेमफाइल से पढ़ता है-सिवाय इसके कि यदि आप वहां 'gemspec' डालते हैं, तो यह gemspec से भी पढ़ता है। तो जब आप 'बंडल इंस्टॉल' चलाते हैं, तो मुझे लगता है कि (लेकिन परीक्षण नहीं किया गया है) कि क्या होता है यह है कि बंडलर जेमफाइल में निर्दिष्ट मणि स्थापित करता है। चूंकि बंडलर ने इसे पहले ही स्थापित कर लिया है, इसलिए यह मणि मणि के लिए 'आवश्यकता' के लिए उपलब्ध है, इस तथ्य के बावजूद कि यह एक मणि भंडार से नहीं आया है। कोई जादू नहीं, बस बंडलर सामान्य रूप से काम कर रहा है। –

+2

Gemfile और .gemspec में एक मणि के संदर्भ को डुप्लिकेट करना अब बंडलर में एक चेतावनी संदेश उठाना प्रतीत होता है, इसलिए यह उत्तर अब सत्य नहीं होगा ... –

5

मैं बस के साथ-साथ इस समस्या को यह पता लगाने की कोशिश कर रहा था। और मैं बस निम्नलिखित समाधान के साथ आया (जो मुझे यकीन नहीं है कि क्या आपका मणि प्रकाशित है या उस oauth2 मणि ​​को फिर से वितरित करने का अधिकार है)।

अपने मणि कि OAuth2 मणि ​​इस चलाने की आवश्यकता है

git submodule add [email protected]:lgs/oauth2.git lib/oauth2 

आप डिफ़ॉल्ट से एक अलग शाखा

cd lib/oauth2 && git checkout <branchname_or_ref> 
cd .. && git add lib/oauth2 
git commit -m "adding outh2 submodule" 

अपने gemspec में की आवश्यकता होती है अपने की आवश्यकता संस्करण रेखा से ऊपर इस ऐड

$:.push File.expand_path('../lib/oauth2/lib', __FILE__) 
इसके अलावा

आप सभी जोड़ने की आवश्यकता होगी oauth2 मणि ​​की रनटाइम निर्भरता आपके gemspec के लिए। मैंने अभी तक इस बारे में कोई रास्ता नहीं निकाला है।

यह मैं क्या किया है, और यह हमारे लिए काम करता है, क्योंकि हमारे मणि Git के माध्यम से की आवश्यकता है तो मुझे यकीन है कि अगर यह एक rubygems प्रकाशित मणि के लिए काम करेंगे नहीं हूँ।

+0

एक सबमिशन के रूप में निर्भरता जोड़ना सही समाधान है यदि आपके पास है दोनों रत्नों को लिखा और दोनों सक्रिय विकास में हैं। – benjineer