web-dev-qa-db-ja.com

「バンドルインストール」を使用してインストールされたすべてのGemをアンインストールする方法

特定のRoRプロジェクトでbundle installを使用してインストールされたすべてのgemを削除するにはどうすればよいですか。他のプロジェクトで使用されているgemをアンインストールしたくない。

39
nish

Rubyを使用しているので、次のようなことができます。

bundle list | Ruby -e 'ARGF.readlines[1..-1].each {|l| g = l.split(" ");  puts "Removing #{g[1]}"; `gem uninstall --force #{g[1]} -v #{g[2].gsub(/\(|\)/, "")}`; }'

注:軽くテストしただけです。

26
rainkinz

すべての宝石を削除する簡単な方法はありません-特定のバンドル内の宝石を削除することは言うまでもありません。これらの提案のいくつかを試すことができます: OSXでインストールされているすべてのgemをアンインストールしますか?

bundle showの代わりにgem listコマンドに適応する


将来的には、このアプローチを試してください。

次の例のようにバンドルをローカルにインストールする場合、gemsはグローバルgemディレクトリにインストールされません。その後、インストールフォルダを簡単に削除して、バンドルのすべてのgemを削除できます。

# install gems to project_root/vendor/bundle
bundle install --path vendor/bundle --without test

パスオプションは、他のすべてと同じように.bundle/configに保存され、他の何かに設定するか、構成から削除しない限り、後続のbundle install呼び出しはそれを使用します!

12
KappaNossi

使用できます(RVMを使用している場合、Tobiasが言うように)

rvm gemset empty [gemset]

たとえば、gemsetで直接

rvm gemset empty 2.0.0@server
11
martincito

実際には次のように簡単です

gem list --no-versions | xargs gem uninstall -a

RVM/RBENVを使用していない場合、gemがシステムライブラリをアンインストールしようとしたときに問題が発生する可能性があり、失敗する可能性があります。その場合は、アンインストールコマンドを1つずつ呼び出してこれらをスキップします。

gem list --no-versions | xargs -n1 gem uninstall -a
5
lzap

https://makandracards.com/jan0sch/9537-uninstall-all-Ruby-gems-from-your-system からの別の方法( rainkinz's answer および- ラルフのコメント )。いくつかのバリエーションがあります。

# if you're the root user:
gem list | cut -d" " -f1 | xargs -I % gem uninstall -aIx %

# if you're a non-root user:
gem list | cut -d" " -f1 | xargs -I % Sudo gem uninstall -aIx %

# docker compose (if your service is named "web" running the root user):
docker-compose run web bash -c 'gem list | cut -d" " -f1 | xargs -I % gem uninstall -aIx %'

####

gem install bundler
# or if using docker compose:
docker-compose run web gem install bundler

# optionally reinstall gems:
bundle install
# or if using docker compose:
docker-compose run web bundle install

これを分解する:

  • gem listはすべてのgemをリストします
  • cut -d" " -f1は最初の列を取ります
  • xargs -I % gem uninstall -aIx %は、各出力行を引数としてgem uninstall -aIxを呼び出します

-Iで引数を%として指定し、セキュリティのために直接渡したことに注意してください。

xargs -I % gem uninstall -aIx %

の代わりに:

xargs gem uninstall -aIx

xargsには、-nなどのオプションをコマンドに渡して予期しない結果を引き起こす可能性があるというセキュリティ上の問題があるためです。これは、次の例で示すことができます。

# correctly prints "-n hello" (with trailing newline):
echo '-n Hello' | xargs -I % echo % | xargs -I % echo %

# incorrectly prints "hello" (without trailing newline):
echo '-n Hello' | xargs echo
3
Zack Morris

Rvmを使用している場合は、もちろん、gemsをインストールしたRubyのバージョンをアンインストールして再インストールすることもできます。

% rvm use
Using /home/ubuntu/.rvm/gems/Ruby-2.2.1
% rvm uninstall 2.2.1
Ruby-2.2.1 - #removing rubies/Ruby-2.2.1..
Ruby-2.2.1 - #removing default Ruby interpreter.............
% rvm install 2.2.1
Searching for binary rubies, this might take some time.
Found remote file https://rvm_io.global.ssl.fastly.net/binaries/ubuntu/14.0/x86_64/Ruby-2.2.1.tar.bz2
Checking requirements for ubuntu.
Requirements installation successful.
Ruby-2.2.1 - #configure
Ruby-2.2.1 - #download
Ruby-2.2.1 - #validate archive
Ruby-2.2.1 - #setup 
Ruby-2.2.1 - #gemset created /home/ubuntu/.rvm/gems/Ruby-2.2.1@global
Ruby-2.2.1 - #importing gemset /home/ubuntu/.rvm/gemsets/global.gems..............................
Ruby-2.2.1 - #generating global wrappers........
Ruby-2.2.1 - #gemset created /home/ubuntu/.rvm/gems/Ruby-2.2.1
Ruby-2.2.1 - #importing gemsetfile /home/ubuntu/.rvm/gemsets/default.gems evaluated to empty gem list
Ruby-2.2.1 - #generating default wrappers........

そして今、あなたはRubyインストールされた宝石のきれいな環境を持っています。

3
Dan Kerchner

デフォルト以外のすべてのgemをアンインストールするためのソリューションが見つかりました:

クレタdelete_gems.rbで

#!/usr/bin/env Ruby
# Remove all gems EXCEPT defaults :)

`gem list -d`.split(/\n\n^(?=\w)/).each do |data|
  match = data.match(/(?<name>([^\s]+)) \((?<versions>.*)\)/)
  name = match[:name]
  versions = match[:versions].split(', ')

  if match = data.match(/^.*\(([\d\.]*),? ?default\): .*$/)
    next if match[1].empty? # it's the only version if this match is empty
    versions.delete(match[1] || versions[0])
  end

  versions.each { |v| system "gem uninstall -Ix #{name} -v #{v}" }
end

このスクリプトを実行します:

Sudo chmod 1777 delete_gems.rb
./delete_gems.rb

デフォルトを除き、すべての宝石が削除されます。ここに元のソリューションのリンク http://zanshin.net/2013/06/10/how-to-delete-all-Ruby-gems/

0
Kirikami

あなたの問題が私のものに似ている場合、GemFileの変更のテスト中にインストールされたすべてのgemをアンインストールする必要があります。

bundle clean

GemFileおよびGemFile.lockで指定されていないすべてのgemをアンインストールしました。

テストしていませんが、Gemfileからすべての行を削除し、上記のコマンドを実行して、RORプロジェクトによって現在のディレクトリにインストールされたすべてのgemを削除できると思います。

0
Perennialista