コマンド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'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:\>
何か不足していますか?
私の知る限り、gemコマンドに組み込みの簡単な方法はありません。
ただし、dm-coreを削除した後、gemリポジトリをクリーンアップするのに役立つgem-Pruneをチェックアウトできます。
gem list | cut -d" " -f1 | xargs gem uninstall -aIx
は、インストールされているすべてのRuby gems!
私は単純な gemの依存関係を再帰的にアンインストールするコマンドラインツール を作成しました。
また、Rubygemsの問題を gem uninstall dependenciesに再帰的に に提出しました。
そのrubygemsの問題はクローズされ、誰かがテストを含むパッチを提供するまで考慮されません。
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`
gem cleanup
トリックを行う必要があります。詳細は here を参照してください。
これらの種類のアンインストールを実行するときの問題は、gemのリストが順番に表示されるため、gumがアンインストール可能であると、行き詰まってしまうことです。以下を数回実行すると、許可されているすべての宝石が削除されます。
gem list | cut -d" " -f1 | sort -R | xargs -n1 gem uninstall -aIx
このコードスニペットは私のためにそれを行います:
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 から取得
一部のワイルドカードを使用して一部のgemを削除する場合(たとえば、特定のベンダーから一部のgemを削除する場合)、次に示すように、gemリストからgrepに出力をパイプできます。
gem list --no-version | grep "opener-" | cut -d " " -f1 | xargs gem uninstall -aIx
上記のコマンドは、名前が「opener-」で始まるすべての宝石を削除します