web-dev-qa-db-fra.com

Dois-je désinstaller manuellement tous les gems dépendants?

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?

36
Hola

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.

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

11

gem list | cut -d" " -f1 | xargs gem uninstall -aIx supprime toutes les gemmes Ruby installées!

30
Bruno Tavares

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.

7
ma11hew28

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`
5
Rob D

gem cleanup devrait faire l'affaire. Voir ici pour plus de détails.

4

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

1
cldwalker

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-" 

0
dnshio