Подтвердить что ты не робот

Должен ли я вручную удалить все зависимые камни?

Я попытался удалить datamapper с помощью команды 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)

Я пробовал найти документацию по "gem uninstall", но, похоже, не удалось автоматически удалить зависимости:

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

Я что-то пропустил?

4b9b3361

Ответ 1

Насколько я знаю, вы правы, для команды gem нет простого способа сделать это.

Однако вы можете проверить gem-prune, который поможет очистить хранилище gem после удаления dm-core.

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

Ответ 2

gem list | cut -d" " -f1 | xargs gem uninstall -aIx удаляет все установленные рубиновые камни!

Ответ 3

Я закончил создание простого инструмента командной строки, чтобы gem удалил зависимости рекурсивно.

Я также опубликовал проблему с rubygems, чтобы gem удалять зависимости рекурсивно.


Проблема с rubygems была закрыта и не будет рассмотрена до тех пор, пока кто-нибудь не предоставит патч, включая тесты.

Ответ 4

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`

Ответ 5

Проблема при запуске такого рода uninstalls заключается в том, что они идут по списку драгоценных камней в порядке, чтобы, если десна была удалена, вы в конечном итоге застреваете. Выполните следующие действия несколько раз, и он должен удалить все драгоценные камни, которым это разрешено.

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

Ответ 6

gem cleanup должен сделать трюк. Подробнее см. здесь.

Ответ 7

Этот фрагмент кода делает это для меня:

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

Ответ 8

Просто перечислите все драгоценные камни, которые вы хотите удалить, например. gem uninstall dm-migrations dm-cli dm-observer. И старайтесь управлять своими драгоценными камнями с помощью Bundler, когда это возможно.

Ответ 9

Если вы хотите использовать некоторые дикие карты для удаления некоторых драгоценных камней (например, для удаления некоторых драгоценных камней у конкретного поставщика), вы можете вывести вывод из списка драгоценных камней в grep, как показано ниже.

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

Вышеупомянутая команда удаляет все драгоценные камни, имя которых начинается с "opener-"