Gemfile経由でbundlerを使用してすべてのgemをインストールしました。 Gemfileからgemを削除し、「バンドルインストール」を実行すると、削除されたgemがアンインストールされると(誤解して)考えました。バンドラーのヘルプファイルを確認しましたが、私が知る限り、gemをアンインストールする方法はありません。
すべてにgem uninstall xを使用するだけですか?これはバンドラーを混乱させるでしょうか?
Bundlerはアプリのルートディレクトリから起動されるため、アプリを機能させるために必要なすべてのgemが存在することを確認します。何らかの理由でgemが不要になった場合は、
gem uninstall gem_name
上で述べたように、バンドラーを実行するたびに依存関係を再チェックします
編集-2014年12月24日
人々がこの質問に何度も来ているのがわかります。少し追加することにしました。私が答えたのは、宝石をグローバルに管理する場合です。 rbenvやrvmなどのgemマネージャーを使用して、gemのセットを特定のプロジェクトにスコープすることを検討してください。
つまり、gemはグローバルレベルでインストールされないため、プロジェクトのGemfileからgemを削除してバンドルを再実行すると、明らかにプロジェクトに読み込まれません。次に、(プロジェクトdirを使用して)bundle cleanを実行すると、Gemfileから(同じディレクトリに)インストールされたすべてのgemがシステムから削除されますが、この時点ではリストに表示されなくなります。短い話-未使用の宝石を削除します。
これにより、Bundlerによってインストールされたgemがアンインストールされます。
bundle exec gem uninstall GEM_NAME
これはスローすることに注意してください
エラー:gemの実行中...(NoMethodError)#<Bundler :: SpecSet:0x00000101142268>の未定義メソッド「delete」
しかし、宝石は実際に削除されます。次回bundle install
を実行すると、gemが再インストールされます。
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を個別に保持する方法はいくつかあります。
rvm
gemsets( http://rvm.io/gemsets/basics )bundle install
次のオプションのいずれか:--deployment
または--path=<path>
( http://bundler.io/v1.3/man/bundle-install.1.html )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
すべての宝石をクリーンアップしてやり直す場合
Sudo gem clean
これを解決するには、Bundlerを介してUnicorn gemを手動で削除し(「Sudo bundler exec gem uninstall Unicorn」)、再バンドル(「Sudo bundle install」)します。
なぜそれが起こったのかはわかりませんが、上記の修正は機能するようです。
Bundlerにbundle remove GEM_NAME
コマンドが追加されました( v1.17.0、2018年10月25日 )。