क्या mygem.gemspec के अंदर एक git शाखा निर्भरता संभव है?
मैं निम्नलिखित के समान कुछ सोच रहा हूं:
gem.add_runtime_dependency 'oauth2', :git => 'git@github.com:lgs/oauth2.git'
... लेकिन यह काम नहीं करता है।
क्या mygem.gemspec के अंदर एक git शाखा निर्भरता संभव है?
मैं निम्नलिखित के समान कुछ सोच रहा हूं:
gem.add_runtime_dependency 'oauth2', :git => 'git@github.com:lgs/oauth2.git'
... लेकिन यह काम नहीं करता है।
जवाबों:
यह संभव नहीं है, और संभावना कभी नहीं होगी क्योंकि यह मणि डेवलपर्स को अनुमति देने के लिए रूबीगम्स के लिए भारी-भरकम होगा ताकि उपयोगकर्ताओं को एक मणि तक पहुंचने के लिए उपयोगकर्ताओं को एक विशिष्ट संस्करण नियंत्रण प्रणाली स्थापित करने की आवश्यकता हो। रत्नों को कम से कम निर्भरता के साथ स्व-निहित होना चाहिए ताकि लोग उन्हें यथासंभव विस्तृत रूप से उपयोग कर सकें।
यदि आप अपनी स्वयं की आंतरिक परियोजनाओं के लिए ऐसा करना चाहते हैं, तो मेरा सुझाव बुंदेलर का उपयोग करना होगा जो इसे काफी समर्थन करता है।
संपादित करें
एक टिप्पणीकार के अनुसार, यह अब सच नहीं है। ऐतिहासिक संदर्भ के लिए पूर्व सूचना बरकरार रखी गई है।
जेमफाइल और .gemspec में एक मणि के संदर्भ को दोहराते हुए अब बुंडलर में एक चेतावनी संदेश प्रकट होता है, इसलिए यह उत्तर अब सच नहीं होगा।
जानकारी निकली
येहुदा काट्ज़ के इस लेख ने मेरे लिए इसी तरह के भ्रम को दूर किया। यह कहता है कि, केवल विकास में उपयोग के लिए, मणिभ में गिट सामान जोड़ना सबसे अच्छा है, लेकिन यह बंडलर अभी भी रत्नों से निर्भरता / संस्करण जानकारी का उपयोग करेगा (मेरे लिए जादुई लगता है, लेकिन मुझे येहुदा पर भरोसा है)।
gemspec
वहां डालते हैं, तो वह रत्नों से भी पढ़ता है। इसलिए जब आप दौड़ते हैं bundle install
, तो मैं मानता हूं (लेकिन परीक्षण नहीं किया गया है) कि ऐसा क्या होता है कि बुंडलर जेमफाइल में निर्दिष्ट रत्न को स्थापित करता है। चूंकि बंडलर ने पहले ही इसे स्थापित कर लिया है, यह मणि मणि के लिए उपलब्ध है require
, इस तथ्य की परवाह किए बिना कि यह मणि भंडार से नहीं आया था। कोई जादू नहीं, बस बुंदेलर हमेशा की तरह काम कर रहा है।
मैं बस इस समस्या का पता लगाने की कोशिश कर रहा था। और मैं बस निम्नलिखित समाधान के साथ आया (जो कि मुझे यकीन नहीं है कि अगर आपका रत्न प्रकाशित हो रहा है या उस ऊह रत्न को पुनर्वितरित करने का अधिकार है)।
अपने रत्न में जिसे oauth2 रत्न की आवश्यकता होती है, उसे चलाएं।
git submodule add git@github.com:lgs/oauth2.git lib/oauth2
यदि आपको डिफ़ॉल्ट से अलग शाखा की आवश्यकता है
cd lib/oauth2 && git checkout <branchname_or_ref>
cd .. && git add lib/oauth2
git commit -m "adding outh2 submodule"
अपने रत्नों में अपनी आवश्यकता संस्करण रेखा से ऊपर जोड़ें
$:.push File.expand_path('../lib/oauth2/lib', __FILE__)
इसके अलावा, आपको अपने रत्न के लिए oauth2 मणि के रनटाइम निर्भरता के सभी को जोड़ना होगा। मैंने अभी तक इसके आसपास कोई रास्ता नहीं निकाला है।
यह वही है जो मैंने किया था, और यह हमारे लिए काम करता है क्योंकि हमारे मणि की आवश्यकता गिट के माध्यम से होती है इसलिए मुझे यकीन नहीं है कि यह रगड़ से प्रकाशित रत्न के लिए काम करेगा।
gem 'my_gem', git: 'git@github.com:me/myrepo', submodules: true
अपने होस्ट एप्लिकेशन में उपयोग करने की आवश्यकता हो सकती है यदि आप जीथब से इंस्टॉल कर रहे हैं।
मुझे एक काम के आस-पास काफ़ी सीधा दिखाई दिया:
कहते हैं कि आप एक परियोजना में हैं P
और आप स्व-निर्मित मणि का उपयोग करना चाहते हैं tools
जो स्वयं एक OS मणि का उपयोग करता है oauth2
।
यदि आपने एक पैच बनाया है oauth2
और tools
आपको अपने रत्न में उस पैच की आवश्यकता है , तो आप स्वीकृत उत्तर के अनुसार रत्न में इस समस्या को ठीक नहीं कर पाएंगे ।
हालाँकि, आप अपने projet P
Gemfile के भीतर इच्छित संस्करण को मसालेदार कर सकते हैं , और यह रनवे द्वारा उपयोग किया जाने वाला संस्करण होगा tools
:
gem 'oauth2', github: 'lgs/oauth2'