2009-06-04 5 views
35

मैंने gem uninstall dm-core आदेश का उपयोग कर डेटामैपर को अनइंस्टॉल करने का प्रयास किया।क्या मुझे सभी आश्रित रत्नों को मैन्युअल रूप से अनइंस्टॉल करना है?

लेकिन ऐसा लगता है कि आश्रित रत्नों का एक पूरा समूह भी अनइंस्टॉल करने की आवश्यकता है।

C:\>gem uninstall dm-core 

You have requested to uninstall the gem: 
     dm-core-0.9.11 
dm-migrations-0.9.11 depends on [dm-core (= 0.9.11)] 
dm-cli-0.9.11 depends on [dm-core (= 0.9.11)] 
dm-serializer-0.9.11 depends on [dm-core (= 0.9.11)] 
dm-timestamps-0.9.11 depends on [dm-core (= 0.9.11)] 
dm-aggregates-0.9.11 depends on [dm-core (= 0.9.11)] 
dm-types-0.9.11 depends on [dm-core (= 0.9.11)] 
dm-is-tree-0.9.11 depends on [dm-core (= 0.9.11)] 
dm-observer-0.9.11 depends on [dm-core (= 0.9.11)] 
dm-validations-0.9.11 depends on [dm-core (= 0.9.11)] 
If you remove this gems, one or more dependencies will not be met. 
Continue with Uninstall? [Yn] n 
ERROR: While executing gem ... (Gem::DependencyRemovalException) 
    Uninstallation aborted due to dependent gem(s) 

मैं पर "मणि स्थापना रद्द करें" प्रलेखन खोजने की कोशिश की लेकिन वहाँ स्वचालित रूप से निर्भरता की स्थापना रद्द करने के लिए एक तरीका हो प्रतीत नहीं होता:

C:\>gem help uninstall 
Usage: gem uninstall GEMNAME [GEMNAME ...] [options] 

    Options: 
    -a, --[no-]all     Uninstall all matching versions 
    -I, --[no-]ignore-dependencies Ignore dependency requirements while 
            uninstalling 
    -x, --[no-]executables   Uninstall applicable executables with 
out 
            confirmation 
    -i, --install-dir DIR   Directory to uninstall gem from 
    -n, --bindir DIR     Directory to remove binaries from 
     --[no-]user-install   Uninstall from user's home directory 
            in addition to GEM_HOME. 
    -v, --version VERSION   Specify version of gem to uninstall 
     --platform PLATFORM   Specify the platform of gem to uninst 
all 

    Common Options: 
    -h, --help      Get help on this command 
    -V, --[no-]verbose    Set the verbose level of output 
    -q, --quiet      Silence commands 
     --config-file FILE   Use this config file instead of defau 
lt 
     --backtrace     Show stack backtrace on errors 
     --debug      Turn on Ruby debugging 


    Arguments: 
    GEMNAME  name of gem to uninstall 

    Summary: 
    Uninstall gems from the local repository 

    Defaults: 
    --version '>= 0' --no-force --install-dir C:/Ruby18/lib/ruby/gems/1.8 
    --user-install 

C:\> 

मैं कुछ याद आ रही है?

उत्तर

11

जहां तक ​​मुझे पता है कि आप सही हैं, ऐसा करने के लिए मणि कमांड में अंतर्निहित कोई आसान तरीका नहीं है।

हालांकि, आप मणि-प्रून की जांच कर सकते हैं जो डीएम-कोर को हटाने के बाद आपके मणि भंडार को साफ करने में मदद कर सकता है।

http://github.com/ddollar/gem-prune/tree/master

+3

एफवाईआई, मणि-प्रून अब बनाए रखा नहीं गया है और नवीनतम संस्करणों के साथ संगत नहीं है। – Segfault

+0

हाँ, मैं कभी भी कभी भी कभी भी ऐसी चीज इंस्टॉल नहीं करूंगा जिसमें मणि का उपयोग निर्भरता हो। नहीं। – Seph

1

कोड का यह टुकड़ा मेरे लिए यह करता है:

def gem_deps(name) 
    if `gem dependency #{name}` =~ /(Gem #{name}-.*?)(Gem|\z)/m 
    $1.split("\n").grep(/runtime\s*\)/).map do |line| 
     line[/[\w-]+/] 
    end.compact 
    else 
    [] 
    end 
end 

def gem_recursive_uninstall(name) 
    deps = gem_deps(name) 
    if deps.empty? 
    system('sudo','gem','uninstall',name) 
    else 
    puts("Uninstall #{name} with dependencies: #{deps.join(', ')}? [y/n]") 
    if gets.chomp[/y/] 
     system(*(%w{sudo gem uninstall} + [name] + deps)) 
    end 
    end 
end 

http://github.com/cldwalker/irbfiles/blob/master/.irb/libraries/gem.rb

+0

एफवाईआई, यह रिकर्सिव नहीं दिखता है। यह केवल एक स्तर से नीचे प्रतीत होता है, यानि, प्रत्यक्ष निर्भरताओं को अनइंस्टॉल करें, लेकिन निर्भरताओं की निर्भरता आदि नहीं। यहां एक [मणि अनइंस्टॉल निर्भरता रिकर्सिव] है (http://stackoverflow.com/questions/952836/do- मैन्युअल रूप से अनइंस्टॉल-सभी-निर्भर-रत्न/672785 9 # 672785 9) समाधान। – ma11hew28

28

gem list | cut -d" " -f1 | xargs gem uninstall -aIx से लिया सभी गहरे लाल रंग का रत्न स्थापित हटा देता है!

+1

यह वास्तव में साफ है, लेकिन अधिक इसलिए क्योंकि मैं 'कट' कमांड से परिचित नहीं था। :) मुझे दिखाने के लिए धन्यवाद! –

+0

अच्छा! रेल 3.1.0.आरसी 4 निर्भरताओं को हटाने के लिए, मैंने ब्रूनो से प्रेरित इस का उपयोग किया: 'मणि सूची | grep। आरसी 4 | कट-डी "" -एफ 1 | xargs मणि uninstall -aIx -v 3.1.0.rc4' – rchampourlier

+0

'कट' साफ है! यहां एक [मणि अनइंस्टॉल निर्भरता रिकर्सिव] है (http://stackoverflow.com/questions/952836/do-i-have-to-manually-uninstall-all- निर्भर- gems/6727859#6727859) समाधान। – ma11hew28

6

मैंने एक साधारण command line tool to gem uninstall dependencies recursively बनाने का अंत किया।

मैंने gem uninstall dependencies recursively पर रूबीजम्स समस्या भी दायर की।


उस रूबीगेम्स मुद्दे को बंद कर दिया गया था और तब तक विचार नहीं किया जाएगा जब तक कोई परीक्षण सहित पैच प्रदान नहीं करता।

5
for gem in `gem list --no-version`; do 
    gem uninstall -aIx $gem 
done 

मेरे लिए सबसे अच्छा काम करता है, नहीं यकीन है कि क्यों, लेकिन

gem list | cut -d" " -f1 | xargs gem uninstall -aIx 

अपने सिस्टम पर काम नहीं करता के रूप में यह अभी भी शिकायत है ...

ERROR: While executing gem ... (Gem::InstallError) 
    cannot uninstall, check `gem list -d some-gem-here` 
0

बस सभी जवाहरात सूची आप उदाहरण रद्द करना चाहते हैं gem uninstall dm-migrations dm-cli dm-observer। और जब भी संभव हो तो बंडलर के साथ अपने रत्नों को प्रबंधित करने का प्रयास करें।

4

इन तरह के अनइंस्टॉल चलाने पर समस्या यह है कि वे रत्नों की सूची को नीचे क्रमबद्ध करते हैं ताकि यदि कोई गम अनइंस्टॉल करने योग्य हो तो आप अटक जाते हैं। नीचे कुछ बार चलाएं और इसे उन सभी रत्नों को हटा देना चाहिए जिनकी अनुमति है।

gem list | cut -d" " -f1 | sort -R | xargs -n1 gem uninstall -aIx 
+0

कॉलिंग 'xargs -n1' कॉलिंग को रोकने से रोक देगा जब यह किसी दिए गए रूबी के लिए डिफ़ॉल्ट रत्न को नहीं हटा सकता है। –

+0

धन्यवाद, प्रतिभा ... –

-1

आप कुछ वाइल्ड कार्ड का उपयोग करने के कुछ जवाहरात दूर करने के लिए (उदाहरण के लिए एक विशिष्ट विक्रेता से कुछ जवाहरात दूर करने के लिए) तो आप पाइप मणि सूची से आउटपुट के रूप में

gem list --no-version | grep "opener-" | cut -d " " -f1 | xargs gem uninstall -aIx 
नीचे दिखाया गया है ग्रेप कर सकते हैं चाहते हैं, तो

उपर्युक्त आदेश उन सभी रत्नों को हटा देता है जिनके नाम "ओपनर-"

+0

यह लगभग सभी मेरे मणि को अनइंस्टॉल करता है, न केवल "सलामी बल्लेबाज" से शुरू होता है – icemelt

2

gem cleanup चाल चलाना चाहिए। विवरण के लिए here देखें।

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