मैं अपने रत्न में स्थानीय रत्न कैसे निर्दिष्ट कर सकता हूं?


359

मैं एक स्थानीय मणि लोड करने के लिए बुंडलर को पसंद करूंगा। क्या उसके लिए कोई विकल्प है? या मुझे .bundle निर्देशिका में मणि फ़ोल्डर को स्थानांतरित करना है?

जवाबों:


539

मेरा मानना ​​है कि आप ऐसा कर सकते हैं:

gem "foo", path: "/path/to/foo"

10
एक हार्ड-कोडेड पथ एक त्वरित हैक सत्र के लिए ठीक है, लेकिन ब्लौडरमिल्क का स्थानीय मणि समाधान संस्करण नियंत्रण के लिए परियोजनाओं के लिए अधिक प्रभावी है। यह आपको दोनों परियोजनाओं - मणि और परियोजना में मणि का उपयोग करते हुए जाँच करता रहता है - जैसे कि अन्य को मणि स्रोत की जाँच या समान पथ साझा करने की आवश्यकता नहीं हो सकती है।
Mahemoff

4
आप अपने प्रोजेक्ट डायरेक्टरी में अपने स्थानीय रत्न के लिए .itignored सिमलिंक का उपयोग करके इसे थोड़ा साफ कर सकते हैं - इस तरह से आप दोनों प्रोजेक्ट पर स्रोत नियंत्रण का अलग-अलग उपयोग कर सकते हैं और अन्य समान निर्देशिका संरचना के बिना भी ऐसा कर सकते हैं।
दान

6
कुछ के लिए बाहर देखो वसंत हो सकता है। यदि आप अपने मणि के लिए एक स्थानीय पथ का उपयोग कर रहे हैं, तो आप अपने स्थानीय मणि के कैश्ड संस्करणों को देख सकते हैं जैसे मैंने रेल कंसोल में किया था। यदि ऐसा नहीं लगता है कि आपके स्थानीय रत्न परिवर्तन spring stopको देखने की कोशिश की जा रही है तो यह देखने की कोशिश करें कि क्या यह वास्तव में मुद्दा है।
जेसन आर

1
Config / spring.rb में स्थानीय रत्न पथ को जोड़ने से रेल कंसोल / सर्वर को पुनः आरंभ करने के बाद अपने स्थानीय रत्न परिवर्तनों को पिक करने में मदद मिलती है।
जेसन आर

4
इसे यहाँ करने का बेहतर तरीका: rossta.net/blog/…
Cyzanfar

229

पथ निर्दिष्ट करने के अलावा (जैसा कि जिमी ने उल्लेख किया है) आप निम्नलिखित विन्यास विकल्प का उपयोग करके केवल अपने वातावरण के लिए स्थानीय मणि का उपयोग करने के लिए बुंडलर को मजबूर कर सकते हैं :

$ bundle config local.GEM_NAME /path/to/local/git/repository

यदि आप दो रत्नों या एक मणि और एक रेल एप्लिकेशन को अगल-बगल विकसित कर रहे हैं तो यह बेहद मददगार है।

ध्यान दें कि, यह केवल तभी काम करता है जब आप पहले से ही अपनी निर्भरता के लिए git का उपयोग कर रहे हों, उदाहरण के लिए:

# In Gemfile
gem 'rack', :github => 'rack/rack', :branch => 'master'

# In your terminal
$ bundle config local.rack ~/Work/git/rack

जैसा कि डॉक्स पर देखा गया है


मुझे इससे समस्या हो रही है क्योंकि मैं उपयोग कर रहा हूं BUNDLE_PATH(वितरण के लिए एक पैकेज का निर्माण)। जब आपने सुझाव दिया था, या जिमी का जवाब था, तो यह केवल एक करता है using, और वास्तव में मेरे BUNDLE_PATHफ़ोल्डर में स्थापित नहीं है । मैं यह पता लगाने में सक्षम नहीं था, कोई मदद?
Automatico

2
इस नोट एक साथ काम नहीं करेंगे gemspec , चर्चा के अनुसार यहाँ
डेवतापले

31
स्थानीय ओवरराइड को अक्षम करने के लिए:bundle config --delete local.GEM_NAME
alxndr

यह काम करने के लिए मुझे रत्न रेखा से संस्करण निर्देश निकालना पड़ा।
एपिगीन

4
यदि आप उत्पादन से विकास में एक अलग शाखा का उपयोग करना चाहते हैं, तो आपको भी सेट करना bundle config disable_local_branch_check trueहोगा या बुंडलर शाखा के बारे में शिकायत करेगा। हालांकि इसके साथ सावधानी बरतें, क्योंकि चेक गलत होने से रोकने के लिए माना जाता है Gemfile.lock। डॉक्स यहां: bundler.io/v1.12/git.html
सिंह

33

यदि आप इस पर काम कर रहे हैं तो आप git के साथ एक स्थानीय रत्न भी देख सकते हैं।

gem 'foo',
  :git => '/Path/to/local/git/repo',
  :branch => 'my-feature-branch'

फिर, अगर यह बदलता है तो मैं चलता हूं

bundle exec gem uninstall foo
bundle update foo

लेकिन मुझे यकीन नहीं है कि सभी को इन दो चरणों को चलाने की आवश्यकता है।


5
यह बहुत अच्छा है, लेकिन अगर आप सक्रिय रूप से मणि विकसित कर रहे हैं तो यह सुविधाजनक नहीं है ... क्योंकि आपको हर बदलाव के लिए प्रतिबद्ध होना चाहिए और bundle uninstall <gem> && bundle install आपके द्वारा अपने ऐप पर प्रतिबिंबित किए जाने वाले प्रत्येक परिवर्तन के लिए
रामसेस

18

रेल परियोजना में स्थानीय मणि भंडार का उपयोग करने के लिए, नीचे दिए गए चरणों का पालन करें:

  1. जांचें कि क्या आपका मणि फ़ोल्डर एक गिट रिपॉजिटरी है (मणि फ़ोल्डर में कमांड निष्पादित किया गया है)

    git rev-parse --is-inside-work-tree
  2. रिपॉजिटरी पथ प्राप्त करना (मणि फ़ोल्डर में कमांड निष्पादित होता है)

    git rev-parse --show-toplevel
  3. रेल अनुप्रयोग के लिए एक स्थानीय ओवरराइड की स्थापना

    bundle config local.GEM_NAME /path/to/local/git/repository

    GEM_NAMEआपके रत्न का नाम कहां है और /path/to/local/git/repositoryबिंदु में कमांड का आउटपुट है2

  4. अपने आवेदन Gemfileमें निम्नलिखित पंक्ति जोड़ें:

    gem 'GEM_NAME', :github => 'GEM_NAME/GEM_NAME', :branch => 'master'
  5. रनिंग bundle installको कुछ इस तरह देना चाहिए:

    Using GEM_NAME (0.0.1) from git://github.com/GEM_NAME/GEM_NAME.git (at /path/to/local/git/repository) 

    GEM_NAMEतुम्हारे मणि का नाम और /path/to/local/git/repositoryबिंदु कहां से है2

  6. अंत में, दौड़ें bundle list, नहीं gem listऔर आपको कुछ इस तरह देखना चाहिए:

    GEM_NAME (0.0.1 5a68b88)

    GEM_NAMEतुम्हारे रत्न का नाम कहां है


कुछ महत्वपूर्ण मामले जिनका मैं उपयोग कर रहा हूं:

Rails 4.0.2  
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux] 
Ubuntu 13.10  
RubyMine 6.0.3
  • ऐसा लगता RubyMineहै कि स्थानीय रत्न बाहरी पुस्तकालय के रूप में नहीं दिख रहे हैं। बग के बारे में अधिक जानकारी यहां और यहां पाई जा सकती है
  • जब मैं स्थानीय रत्न में कुछ बदल रहा हूं, तो रेल एप्लिकेशन में लोड होने के लिए मुझे stop/startरेल सर्वर चाहिए
  • अगर मैं versionमणि को बदल रहा हूं , stopping/startingतो रेल सर्वर मुझे एक त्रुटि देता है। इसे ठीक करने के लिए, मैं Gemfileइस तरह रेल के अनुप्रयोग में मणि संस्करण निर्दिष्ट कर रहा हूं :

    gem 'GEM_NAME', '0.0.2', :github => 'GEM_NAME/GEM_NAME', :branch => 'master'

0

आप स्रोत के source: 'https://source.com', git repository (:github => 'git/url')साथ और स्थानीय पथ के साथ रत्नों का संदर्भ दे सकते हैं :path => '.../path/gem_name'
आप जेमफाइल्स के बारे में अधिक जान सकते हैं और उन्हें इस लेख में कैसे उपयोग कर सकते हैं ।


-4

यदि आप शाखा भी चाहते हैं:

gem 'foo', path: "point/to/your/path", branch: "branch-name"

यह काम नहीं करता है, एक त्रुटि उत्पन्न करता है: Only gems with a git source can specify a branch.
KenB
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.