レールバンドルクリーン


88

バンドルを更新すると、古いバージョンのgemがいくつかインストールされます。そのgemの新しいバージョンがインストールされているためです。bundle実行可能ファイルの下にそのようなコマンドはありませんbundle clean。これらの古い宝石をどうやって取り除くのですか?

これは私のRailsアプリでスラグのサイズを小さくする試みです。

回答:


131

Bundler 1.1以降を使用bundle cleanしている場合は、想像どおりにを使用できます。これは、使用している場合は冗長ですbundle install --path(Bundlerは--pathで指定した場所を管理するため、古いgemを削除する責任を負います)が、Bundlerを使用してgemをシステムgemとしてインストールした場合、システムgem bundle clean --forceは削除されませんGemfileで必要です。明白な注意点:GemfileにないシステムGemに依存する他のアプリがある場合は、これを行わないでください!

Pat Shaughnessyは、bundle cleanBundler 1.1でのその他の新しい説明について説明しています。


30
rvmを使用している人bundle clean --forceは、グローバルgemには触れず、現在のgemsetにあるものだけに触れることに注意してください。したがってbundle clean --force、と同じ結果が生成され、その後にがrvm gemset empty続きbundle installます。
Gabe Kopley 2013

19
免責事項:「バンドルクリーン--force」は、注意しないと、多数の宝石を吹き飛ばす可能性があります。これがこの応答の最初の行になるはずです。特に、投票数が非常に多いためです。注意してください!
jerrylroberts 2013

36

RVMを使用rvm gemset emptyしている場合は、現在のgemsetに使用できます。このコマンドは、現在のgemsetにインストールされているすべてのgemを削除します(gemset自体はそのまま残ります)。次にbundle install、gemの実際のバージョンをインストールするために実行します。また、rakeやbundlerなどの一般的なgemは削除しないようにしてくださいrvm gemset empty(その場合は、のgem install前に手動でインストールしてくださいbundle install)。


22

RVMを使用している場合は、gemsをgemsetsにインストールできます。このようにして、完全なクリーンアップを実行したい場合は、gemsetを削除するだけで、インストールされているすべてのgemが削除されます。もう1つのオプションは、使用していないgemをアンインストールしてbundle installコマンドを再実行することです。

bundlerはプロジェクトごとのgemバージョン管理ツールであることを意図しているため、bundle cleanコマンドは提供されません。そうすることは、他のプロジェクトに関連する宝石を削除する可能性もあるので、望ましくありません。つまり、おそらくbundlerは、gemディレクトリの管理に使用するのに不適切なツールです。私の個人的な推奨事項は、RVM宝石セットを使用して、特定のプロジェクトまたはRubyバージョンで宝石をサンドボックス化することです。


41
gemsetを削除する必要はありません。「rvm gemset empty gemset_name」と入力して、「bundle install」を再度実行するだけです。
JAG、2013年

素晴らしい説明。バンドラーについて知っていると役立ちます。ありがとう。
Volte

9
bundle clean --forceが効果を発揮します
セーラー

「バンドルインストール」がgemの再ダウンロードを拒否した場合は、rvmで、.rvm / gems / ruby​​-xxxxxx / specificationsフォルダーをワイプします。
barbacan 14

@JAG バンドルインストールを呼び出すことができるようにgemsetをクリーニングした後、「gemインストールバンドル
maleta

13

正直なところ、バンドルの循環依存関係に問題があり、最善の方法はrm -rf .bundleです。頭痛を省き、ハンマーを使用してください。


1
「--no-deploymentを指定してbundle installを呼び出す必要がある」というバグを回避するために、これを行う必要がありました。ありがとう
ケビン

2
アイデアをありがとう。私にとっては、より大きなハンマーを使用することが役立ちました。rvm implode --forceその後、rvmを再インストールします
Ryan

1

私はあなたに宝石をインストールすると思いますvendor/bundleか?もしそうなら、なぜすべての宝石を削除してクリーンアップしbundle installないのですか?


私のベンダーディレクトリは、アセットとインストールされたプラグインのみを追跡します。私はRails 3.1にいます
iGbanam

次に、未使用のgemがデプロイ時にコピーされない場合にそれらを削除する理由は何ですか?彼らはそれほど多くのスペースをとりません。
Leonid Shevtsov、2011年

このRailsアプリをイントラネットにデプロイしています。つまり、ローカルでファイルと環境を処理します。私がこれに使用できる解決策を知っている場合は、共有してください。
iGbanam 2011年


0

Gemfileから古いgemを削除するだけです。Herokuについて話している場合(言及していません)、スラッグは新しいリリースごとにコンパイルされ、そのファイルの現在のコンテンツを使用します。


これは必ずしもherokuに当てはまるわけではありません。Railsアプリ自体のサイズを小さくしたい。
iGbanam 2011年

0

実行するだけで、廃止されたgemをクリーンアップし、バンドル後に印刷警告を削除します。

bundle clean --force

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.