回答:
Bundlerはアプリのルートディレクトリから起動されるため、アプリを動作させるために必要なすべてのGemが存在することを確認します。何らかの理由でGemが不要になった場合は、実行する必要があります
gem uninstall gem_name
上で述べたように、バンドルを実行するたびに依存関係が再チェックされます
編集-24.12.2014
私は人々がこの質問に来続けていることがわかります私は少し何かを追加することにしました。私が出した答えは、あなたがあなたの宝石をグローバルに維持する場合のためのものでした。rbenvやrvmなどのgemマネージャーを使用して、gemのセットを特定のプロジェクトにスコープ設定しておくことを検討してください。
つまり、gemはグローバルレベルでインストールされないため、プロジェクトのGemfileからgemを削除してバンドルを再実行すると、明らかに、プロジェクトにロードされません。次に、(プロジェクトdirを使用して)bundle cleanを実行すると、Gemfileから(同じディレクトリに)一度インストールされたすべてのgemがシステムから削除されますが、この時点ではリストに表示されなくなります。短い話-未使用の宝石を削除します。
これにより、バンドラーによってインストールされたgemがアンインストールされます。
bundle exec gem uninstall GEM_NAME
これがスローすることに注意してください
エラー:gemの実行中...(NoMethodError)#<Bundler :: SpecSet:0x00000101142268>の未定義のメソッド `delete '
しかし、宝石は実際に削除されます。次回bundle install
、gem を実行すると再インストールされます。
ERROR: While executing gem ... (NoMethodError) undefined method `delete' for #<Bundler::SpecSet:0x00000101142268>
新しいバージョンの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)bundle clean --force
現在のプロジェクトでは使用していませんが、他のプロジェクトでは使用している多くの宝石を削除して使用しました。パスを設定するはずでしたか?ただ、bundle clean
「--pathが設定されているか、または--forceが設定されている場合にのみ、バンドルクリーン使用することができます」を返します。しかし、--path
オプションはヘルプにも表示されません。
clean
グローバルgemsetを使用している場合、このタスクは実際には意味がありません。ただし、必要に応じて、プロジェクトごとに宝石を個別に設定できます。あなたはRVM gemsets(経由ので、どちらかを行うことができますrvm.io/gemsets/basics)、またはを通じて宝石のパスを指定することで--path
のオプションbundle install
(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にbundle remove GEM_NAME
コマンドが追加されました(2018年10月25日、v1.17.0以降)。
gem uninstall pg
プロジェクトフォルダーから実行すると、バンドラーではなくグローバル/システムレベルのgemsetからpgがアンインストールされます