J'ai essayé de désinstaller datamapper en utilisant la commande gem uninstall dm-core
.
Mais il semble que tout un tas de gems dépendants doivent également être désinstallés.
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)
J'ai essayé de trouver de la documentation sur "gem uninstall" mais il ne semble pas y avoir de moyen de désinstaller automatiquement les dépendances:
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:\>
Est-ce que je manque quelque chose?
Autant que je sache, vous avez raison, il n’existe pas de méthode simple pour ce faire dans la commande gem.
Cependant, vous pouvez consulter gem-Prune, qui peut aider à nettoyer votre référentiel gem après avoir supprimé dm-core.
gem list | cut -d" " -f1 | xargs gem uninstall -aIx
supprime toutes les gemmes Ruby installées!
J'ai fini par créer un simple outil de ligne de commande pour gem désinstaller les dépendances de manière récursive .
J'ai également déposé un problème rubygems à gem désinstaller des dépendances de manière récursive .
Ce problème rubygems a été clos et ne sera pas pris en compte tant que personne n’aura fourni de correctif, y compris des tests.
Le problème lors de l’exécution de ce type de désinstallation est qu’ils descendent dans la liste des pierres précieuses dans l’ordre; ainsi, si un chewing-gum est désinstallable, vous finissez par rester bloqué. Exécutez le programme ci-dessous plusieurs fois et il devrait supprimer toutes les gemmes autorisées.
gem list | cut -d" " -f1 | sort -R | xargs -n1 gem uninstall -aIx
for gem in `gem list --no-version`; do
gem uninstall -aIx $gem
done
Fonctionne le mieux pour moi, je ne sais pas pourquoi mais
gem list | cut -d" " -f1 | xargs gem uninstall -aIx
ne fonctionne pas sur mon système car il se plaint toujours ...
ERROR: While executing gem ... (Gem::InstallError)
cannot uninstall, check `gem list -d some-gem-here`
gem cleanup
devrait faire l'affaire. Voir ici pour plus de détails.
Cet extrait de code le fait pour moi:
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
Extrait de http://github.com/cldwalker/irbfiles/blob/master/.irb/libraries/gem.rb
Si vous souhaitez utiliser des caractères génériques pour supprimer certaines pierres précieuses (par exemple, pour supprimer certaines pierres précieuses d'un fournisseur spécifique), vous pouvez diriger la sortie de la liste des pierres précieuses vers grep, comme indiqué ci-dessous.
gem list --no-version | grep "opener-" | cut -d " " -f1 | xargs gem uninstall -aIx
La commande ci-dessus supprime toutes les gemmes dont le nom commence par "opener-"