2009-06-04 18 views
35

Intenté desinstalar el mapeador de datos usando el comando gem uninstall dm-core.¿Debo desinstalar manualmente todas las gemas dependientes?

Pero parece que también es necesario desinstalar un montón de gemas dependientes.

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) 

He intentado encontrar documentación sobre "desinstalación joya", pero no parece ser una manera de desinstalar las dependencias automáticamente:

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:\> 

Me estoy perdiendo algo?

Respuesta

11

Por lo que yo sé, usted está en lo cierto, no hay una forma fácil incorporada al comando de la gema para hacer esto.

Sin embargo, puede consultar gem-prune, que puede ayudar a limpiar su depósito de gemas después de haber eliminado dm-core.

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

+3

FYI, gem-prune ya no se mantiene y no es compatible con las últimas versiones. – Segfault

+0

Sí, nunca instalaré nunca nada que tenga dependencias que usen gemas. Nop. – Seph

1

Este fragmento de código hace por mí:

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 

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

+0

FYI, esto no parece recursivo. Solo parece bajar un nivel, es decir, desinstalar las dependencias directas, pero no las dependencias de las dependencias, etc. Aquí hay una [joya de la dependencia de la desinstalación recursiva] (http://stackoverflow.com/questions/952836/do- i-have-to-uninstall-all-dependent-all-dependent-gems/6727859 # 6727859) solución. – ma11hew28

28

gem list | cut -d" " -f1 | xargs gem uninstall -aIx borra todas las gemas de rubí instalados!

+1

Eso es realmente ordenado, pero más porque no estaba familiarizado con el comando 'cortar'. :) Gracias por mostrarme! –

+0

¡Agradable! Para eliminar las dependencias de rails3.1.0.rc4, utilicé este inspirado de Bruno: 'gem list | grep .rc4 | cut -d "" -f1 | xargs gem uninstall -aIx -v 3.1.0.rc4' – rchampourlier

+0

'cut' está limpio! Aquí hay una solución [gem uninstall dependency recursive] (http://stackoverflow.com/questions/952836/do-i-have-to-manually-uninstall-all-dependent-gems/6727859#6727859). – ma11hew28

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

funciona mejor para mí, no sé por qué pero

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

no funciona en mi sistema, ya que todavía se queja ...

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

Basta con enumerar todas las gemas quieres desinstalar, por ejemplo gem uninstall dm-migrations dm-cli dm-observer. Y trate de administrar sus gemas con Bundler siempre que sea posible.

4

El problema al ejecutar este tipo de desinstalaciones es que bajan por la lista de gemas en orden, de modo que si una goma de mascar es desinstalable, terminas atascado. Ejecute el siguiente abajo algunas veces y debería eliminar todas las gemas que está permitido.

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

Llamar a 'xargs -n1' evitará que la invocación se detenga cuando no pueda eliminar las gemas predeterminadas para un Ruby determinado. –

+0

Gracias, genio ... –

-1

Si desea utilizar algunos comodines para eliminar algunas joyas (por ejemplo, para eliminar algunas joyas de un proveedor específico), entonces puede canalizar la salida de la lista joya para GREP como se muestra a continuación

gem list --no-version | grep "opener-" | cut -d " " -f1 | xargs gem uninstall -aIx 

El comando anterior quita todas las gemas cuyo nombre comienza con "abridor-"

+0

su desinstalación casi toda mi joya, no solo eso comienza con "abrelatas-" – icemelt

2

gem cleanup, debe hacer el truco. Vea here para más detalles.

Cuestiones relacionadas