web-dev-qa-db-ja.com

rails bundle clean

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

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

85
iGbanam

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

Pat Shaughnessyには bundle cleanおよびbundler 1.1のその他の新しい追加 の説明があります。

126
David Waller

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

36
trushkevich

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

Bundlerはプロジェクトごとのgemバージョン管理ツールであるため、bundle cleanコマンドは提供しません。そうすることは、他のプロジェクトに関連する宝石も削除する可能性を意味しますが、これは望ましくありません。つまり、おそらくbundlerは、gemディレクトリの管理に使用するのに間違ったツールです。個人的には、RVM gemsetsを使用して、特定のプロジェクトまたはRubyバージョンのgemをサンドボックス化することをお勧めします。

21
Pan Thomakos

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

13
Tyler Brock

まったく同じ質問の答えを探しているときに、 gem_unused に出会いました。
この記事もご覧ください: http://chill.manilla.com/2012/12/31/clean-up-your-dirty-gemsets/
ソースコードはGitHubで入手できます。 https://github.com/apolzon/gem_unused

1
JJD

Gemをvendor/bundleにインストールすると仮定しますか?もしそうなら、なぜすべての宝石を削除してきれいなbundle installをしないのですか?

1
Leonid Shevtsov

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

0
Gareth