OSX में, सभी स्थापित रत्नों की स्थापना रद्द करें?


177

ऐसे उदाहरण हैं जहां मैं पिछले सभी रत्न प्रतिष्ठानों को वापस करना और अनइंस्टॉल करना चाहूंगा।

उदाहरण के लिए, मुझे आरवीएम का उपयोग करने के लिए अपने रेल विकास मशीन को स्थानांतरित करने के लिए एक दोस्त की सहायता करने की आवश्यकता थी। जैसा कि वे पहले सिस्टम-वाइड का उपयोग कर चुके थे gem, वह कई परियोजनाओं के साथ काम करते समय कई सिरदर्द का अनुभव कर रहा था। अनिवार्य रूप से, वह आरवीएम कन्वर्ट के लिए पोस्टर-चाइल्ड था।

मैं अपने OSX सिस्टम पर सभी रत्नों की स्थापना कैसे कर सकता हूं?


1
आजकल यह अनावश्यक है। आरवीएम जानता है कि सही रूबी संस्करण पर स्विच करने के बाद आपको रत्नों की तलाश कहाँ करनी है।
फ्रैंकलिन यू

1
yes Y | gem uninstall -a -I
स्टॉपेंको

@FranklinYu को बस एक त्वरित नोट - यह हमेशा मामला नहीं होता है। मेरे पास ऐसे उदाहरण हैं जहां Nokogiri की विश्व स्तर पर स्थापित प्रति हमेशा RVM रत्न पर मिसाल बन रही थी, और वैश्विक को अनइंस्टॉल करना पड़ा
नाथन क्रूस

@NathanCrause तब यह आरवीएम में एक बग है और इसकी सूचना दी जानी चाहिए। मुझे पूरा यकीन है कि यह आरवीएम का अभीष्ट व्यवहार नहीं है।
फ्रैंकलिन यू

@FranklinYu आप सही हैं, लेकिन जब तक इस तरह के मुद्दे का समाधान नहीं हो जाता है, तब भी सभी रत्नों को शुद्ध करने के तरीके की आवश्यकता होगी। मैं केवल इस बात का उल्लेख कर रहा था कि यह "अनावश्यक" है, जो एक आदर्श स्थिति में सही होगा, लेकिन हे, चीजें हर समय बग़ल में होती हैं।
नाथन क्रूस

जवाबों:


427

माणिक्य> = 2.1.0

gem uninstall -aIx

aसभी संस्करणों को हटाता है
Iनिर्भरता को
xनिष्पादन योग्य शामिल करता है

रगड़ <2.1.0

for i in `gem list --no-versions`; do gem uninstall -aIx $i; done

1
डुह, आपने मुझे गति के लिए हरा दिया :)
रोमेन

3
फिर निश्चित रूप से, आप डिफ़ॉल्ट रत्नों की एक सूची को फिर से स्थापित करना चाहते हैं जो मेरे लिए है: "मणि स्थापित बंडलर जोंस मिनिटेस्ट रेक rdoc"
मूर III

5
रत्न सूची | cut -d "" -f1 | sudo xargs gem uninstall -Iax -worked for me
lesyk

5
काम नहीं करता है: ERROR: While executing gem ... (Gem::InstallError) gem "test-unit" cannot be uninstalled because it is a default gem(मणि 2.0.3)
एम। एंथोनी ऐयेलो

@Anthony हालांकि इस एक सा खतरनाक है, आप के साथ त्रुटियों को दबाने कर सकते हैंfor i in `gem list --no-versions`; do gem uninstall -aIx $i 2>/dev/null; done
डैरेन चेंग

46

आप एक नया जेमफाइल भी बना सकते हैं और चला सकते हैं bundle clean --force। यह अन्य सभी रत्नों को हटा देगा जो नए जेमफाइल में शामिल नहीं हैं।


3
यह बहुत उपयोगी है :)
user1190286

1
सर्वोत्तम उत्तर क्योंकि टेस्ट-यूनिट को अनइंस्टॉल नहीं किया जा सकता है और इस प्रक्रिया को मार देता है।
वेस्टनप्लैटर

2
हां, यह सबसे अच्छा जवाब है। मुझे लगता है कि ओपी को यह पद 2.0.0 चुनना चाहिए।
theTuxRacer

2
यह निश्चित रूप से मेरे लिए काम कर रहा है और अन्य संस्करणों की तुलना में बहुत अधिक सुरुचिपूर्ण है
क्रिस्पेन स्मिथ

29

एक अलग-अलग संस्करण, कट चरण को लंघन करना,'-no-version 'विकल्प का लाभ लेना:

gem list --no-version |xargs gem uninstall -ax

जब से आप सब कुछ हटा रहे हैं, मुझे 'I' विकल्प की आवश्यकता नहीं दिख रही है। जब भी मणि निकाली जाती है, यह ठीक है।


1
sudoयदि रत्न किसी साधारण उपयोगकर्ता द्वारा स्थापित किए गए हों तो यह आवश्यक नहीं होना चाहिए।
sampablokuper

मेरे जवाब को एक कारण के लिए देखें कि मैंने नीचे क्यों उतारा। मैं यहाँ टिप्पणी करना चाहता था, लेकिन टिप्पणियाँ लाइनों की अनुमति नहीं देती ...
aercolino

अच्छा है, बहुत सारे रत्न निकाल सकते हैं, लेकिन कुछ ऐसा है जैसे यह बंडल, रेक,
आरवीएम

डिफ़ॉल्ट रत्नों को निकालने में असमर्थता के कारण बहुत ही सुंदर लेकिन विफल रहता है। इसके बजाय क्रॉफ्टर के समाधान का सुझाव दें
Freedom_Ben

11

पहले सुनिश्चित करें कि आपके पास कम से कम मणि संस्करण 2.1.0 है

gem update --system
gem --version
# 2.6.4

स्थापना रद्द करने के लिए बस चलाएं:

gem uninstall --all

आपको sudoकमांड का उपयोग करने की आवश्यकता हो सकती है :

sudo gem uninstall --all

10

या तो उपयोग करें

$ gem list --no-version | xargs gem uninstall -ax

या

$ sudo gem list --no-version | xargs sudo gem uninstall -ax

आप जो चाहते हैं उसके आधार पर, आपको दोनों को निष्पादित करने की आवश्यकता हो सकती है, क्योंकि "मणि सूची" और "सूद मणि सूची" स्वतंत्र सूची प्रदान करते हैं।

एक सामान्य "मणि सूची" को एक sudo-ed "मणि अनइंस्टॉल" के साथ न मिलाएं और न ही दूसरे तरीके के इर्द-गिर्द अन्यथा आप सिडो-संस्थापित रत्नों (पूर्व) को अनइंस्टॉल कर सकते हैं या बहुत सारी त्रुटियां (उत्तरार्द्ध) प्राप्त कर सकते हैं।


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

9

यदि आप Rubygems संस्करण 2.1.0 या बाद के संस्करण का उपयोग कर रहे हैं, तो आप कोशिश कर सकते हैं gem uninstall --all:।


3
यह 'रत्न' होना चाहिए 'रत्न' नहीं।
लीजिए

6

अगर आपको माणिक का उपयोग करना पसंद है:

ruby -e "`gem list`.split(/$/).each { |line| puts `gem uninstall -Iax #{line.split(' ')[0]}` unless line.strip.empty? }"

चियर्स


मणि को क्रियान्वित करते हुए ... (रत्न :: CommandLineError) कम से कम एक मणि नाम निर्दिष्ट करें (उदाहरण के लिए मणि निर्माण GEMNAME): त्रुटि: मैं के साथ यह एक त्रुटि हो रही है
mbdev

1
स्टैक ओवरफ़्लो पर :) अपने जवाब के लिए @mbdev फिक्स्ड, hehe उपलब्ध कराने के समर्थन
हारिस Krajina

यह इस बात में आसान है कि यह विंडोज में काम करता है जहां कमांड शेल है ... अच्छा नहीं है।
एडम सी। पी।

5

माणिक्य> = 2.1.0

gem uninstall -aIx

यदि टर्मिनल त्रुटि के नीचे आता है

ERROR:  While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.

फिर नीचे दिए गए कमांड के रूप में ऊपर लिखें

sudo gem uninstall -aIx

और अपना Mac os अकाउंट पासवर्ड डाले !!


5

और आप में से जो लोग यहाँ हैं क्योंकि आप एक निश्चित उपसर्ग के साथ सभी रत्नों को निकालना चाहते हैं ( अहम मैं आपको aws-sdk देख रहा हूँ!) आप कुछ इस तरह से चला सकते हैं:

gem list --no-version | grep "aws-sdk-" | xargs gem uninstall -aIx

के बजाय स्पष्ट रूप से अपनी क्वेरी में डाल दिया aws-sdk-। आपको -Iवहाँ पर निर्भरता को अनदेखा करने की आवश्यकता है ।

एंडो के पहले के उत्तर को अपनाया


4

एकमात्र आदेश ने मुझे सभी रत्नों को साफ करने और डिफ़ॉल्ट रत्नों की उपेक्षा करने में मदद की, जिन्हें अनइंस्टॉल नहीं किया जा सकता है

for x in `gem list --no-versions`; do gem uninstall $x -a -x -I; done

2

मैंने बहुत पहले ऐसा नहीं किया था (एक ही पोस्टर-बच्चा आरवीएम स्विचर स्थिति):

gem list | cut -d" " -f1 | sudo xargs gem uninstall -Iax

सभी रत्नों की सूची (incl। संस्करण सामग्री) लेता है, इसे केवल मणि नाम रखने के लिए काटता है, फिर ऐसे रत्नों के सभी संस्करणों को अनइंस्टॉल करता है।

sudoकेवल उपयोगी है अगर आप जवाहरात स्थापित किया था पूरे सिस्टम में, और जब तक आवश्यक शामिल नहीं किया जाना चाहिए।


1

जब रत्नों को जड़ के रूप में स्थापित करने की कोशिश की जाती है, तो जब यह एक डिफ़ॉल्ट मणि को अनइंस्टॉल करने की कोशिश में त्रुटि का सामना करता है, तो xargs रुक जाता है:

sudo gem list | cut -d" " -f1 | xargs gem uninstall -aIx
# ERROR:  While executing gem ... (Gem::InstallError)
#    gem "test-unit" cannot be uninstalled because it is a default gem


यह सभी के लिए काम नहीं करेगा, लेकिन यहां मैंने इसके बजाय क्या इस्तेमाल किया है:

sudo for gem (`gem list | cut -d" " -f1`); do gem uninstall $gem -aIx; done

1
gem list --no-version | grep -v -e 'psych' -e 'rdoc' -e 'openssl' -e 'json' -e 'io-console' -e 'bigdecimal' | xargs sudo gem uninstall -ax

यहाँ grep डिफ़ॉल्ट रत्नों को छोड़कर है। अन्य सभी रत्नों की स्थापना रद्द की जाएगी। sudoयदि आपको अनुमति के मामले मिलते हैं, तो आप इसे पहले भी कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.