我是否必须手动卸载所有依赖宝石?

Hol*_*ola 40 ruby dependencies rubygems ruby-on-rails

我尝试使用该命令卸载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)
Run Code Online (Sandbox Code Playgroud)

我尝试找到关于"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'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:\>
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

小智 32

gem list | cut -d" " -f1 | xargs gem uninstall -aIx 删除所有已安装的红宝石宝石!

  • OS X Lion版:宝石列表| cut -d"" - f1 | xargs sudo gem uninstall -aIx (3认同)

Jon*_*ace 11

据我所知,你是正确的,没有一种简单的方法来内置gem命令来做到这一点.

但是,您可以查看gem-prune,它可以在您删除dm-core后帮助清理您的gem存储库.

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

  • 仅供参考,gem-prune不再维护且与最新版本不兼容. (4认同)

ma1*_*w28 7

我最终制作了一个简单的命令行工具来递归地卸载gem依赖项.

我还递归地gem卸载依赖项提交了一个rubygems问题.


该rubygems问题已经关闭,在有人提供包含测试的补丁之前不会考虑.


小智 6

gem cleanup应该做的伎俩。有关详细信息,请参见此处

  • 这只是删除了旧版本的 gems,而不是依赖项。 (2认同)

小智 5

for gem in `gem list --no-version`; do
  gem uninstall -aIx $gem
done
Run Code Online (Sandbox Code Playgroud)

对我来说效果最好,不知道为什么

gem list | cut -d" " -f1 | xargs gem uninstall -aIx
Run Code Online (Sandbox Code Playgroud)

在我的系统上不起作用,因为它仍然抱怨...

ERROR:  While executing gem ... (Gem::InstallError)
    cannot uninstall, check `gem list -d some-gem-here`
Run Code Online (Sandbox Code Playgroud)


Mic*_*tos 5

运行这些卸载时的问题是,它们按顺序排列在宝石列表中,因此如果可以卸载口香糖,那么最终会卡住.运行以下几次,它应该删除允许的所有宝石.

gem list | cut -d" " -f1 | sort -R | xargs -n1 gem uninstall -aIx
Run Code Online (Sandbox Code Playgroud)