web-dev-qa-db-ja.com

Rails3プロジェクトからgemをアンインストールする最良の方法は何ですか?

Gemfile経由でbundlerを使用してすべてのgemをインストールしました。 Gemfileからgemを削除し、「バンドルインストール」を実行すると、削除されたgemがアンインストールされると(誤解して)考えました。バンドラーのヘルプファイルを確認しましたが、私が知る限り、gemをアンインストールする方法はありません。

すべてにgem uninstall xを使用するだけですか?これはバンドラーを混乱させるでしょうか?

96
lashleigh

Bundlerはアプリのルートディレクトリから起動されるため、アプリを機能させるために必要なすべてのgemが存在することを確認します。何らかの理由でgemが不要になった場合は、

    gem uninstall gem_name 

上で述べたように、バンドラーを実行するたびに依存関係を再チェックします

編集-2014年12月24日

人々がこの質問に何度も来ているのがわかります。少し追加することにしました。私が答えたのは、宝石をグローバルに管理する場合です。 rbenvやrvmなどのgemマネージャーを使用して、gemのセットを特定のプロジェクトにスコープすることを検討してください。

つまり、gemはグローバルレベルでインストールされないため、プロジェクトのGemfileからgemを削除してバンドルを再実行すると、明らかにプロジェクトに読み込まれません。次に、(プロジェクトdirを使用して)bundle cleanを実行すると、Gemfileから(同じディレクトリに)インストールされたすべてのgemがシステムから削除されますが、この時点ではリストに表示されなくなります。短い話-未使用の宝石を削除します。

133
Daniel

これにより、Bundlerによってインストールされたgemがアンインストールされます。

bundle exec gem uninstall GEM_NAME

これはスローすることに注意してください

エラー:gemの実行中...(NoMethodError)#<Bundler :: SpecSet:0x00000101142268>の未定義メソッド「delete」

しかし、宝石は実際に削除されます。次回bundle installを実行すると、gemが再インストールされます。

96
phatmann

Bundlerの新しいバージョンでは、クリーンタスクを使用できます。

$ bundle help clean
Usage:
    bundle clean

Options:
    [--dry-run=only print out changes, do not actually clean gems]
    [--force=forces clean even if --path is not set]
    [--no-color=Disable colorization in output]
    -V, [--verbose=Enable verbose output mode]

Cleans up unused gems in your bundler directory
$ bundle clean --dry-run --force
Would have removed actionmailer (3.1.12)
Would have removed actionmailer (3.2.0.rc2)
Would have removed actionpack (3.1.12)
Would have removed actionpack (3.2.0.rc2)
Would have removed activemodel (3.1.12)
...

編集:

グローバルgemsetを使用している場合(つまり、すべてのプロジェクトが同じ場所にgemを保持している場合)、これはお勧めしません。ただし、各プロジェクトのgemを個別に保持する方法はいくつかあります。

  1. rvm gemsets( http://rvm.io/gemsets/basics
  2. bundle install次のオプションのいずれか:--deploymentまたは--path=<path>http://bundler.io/v1.3/man/bundle-install.1.html
21

Gemをアンインストールするには、「gem uninstall gem_name」を使用する必要があります。

Gemをシステム全体にインストールした場合(つまり、sudo bundle install)、-nオプションを使用してバイナリディレクトリを指定し、gemに属するバイナリが削除されるようにする必要がある場合があります。例えば

Sudo gem uninstall gem_name  -n /usr/lib/Ruby/gems/1.9.1/bin
1
Declan McGrath

すべての宝石をクリーンアップしてやり直す場合

Sudo gem clean
1

これを解決するには、Bundlerを介してUnicorn gemを手動で削除し(「Sudo bundler exec gem uninstall Unicorn」)、再バンドル(「Sudo bundle install」)します。

なぜそれが起こったのかはわかりませんが、上記の修正は機能するようです。

1
Aaron Marks

Bundlerにbundle remove GEM_NAMEコマンドが追加されました( v1.17.0、2018年10月25日 )。

0
Delena Malan