2011-10-26 9 views
69

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

これは、私のレールアプリでスラグのサイズを減らすための試みです。

答えて

113

Bundler 1.1以降を使用している場合は、できるだけ想像したとおりにbundle cleanを使用できます。 bundle install --pathを使用している場合は冗長です(Bundlerは--pathで指定した場所を管理するので古い宝石を削除する責任があります).Bundlerを使用して宝石をシステム宝石としてインストールした場合、bundle clean --forceはシステムを削除しますあなたのGemfileで必要とされない宝石。盲目的に明白な注意点:あなたのGemfileにないシステム・ジェムに依存する他のアプリを持っているなら、これをしないでください!

Pat Shaughnessyには、bundle clean and other new additions in bundler 1.1の説明があります。

+20

rvmを使っている人は、 'bundle clean --force'はあなたのグローバルな宝石に触れるのではなく、あなたの現在の宝石のものだけに触れることに注意してください。したがって、 'bundle clean --force'は' rvm gemset empty'と 'bundle install'の後に同じ結果を出します。 –

+15

免責事項:注意しないと、「バンドルクリーンフォース」が多数の宝石を吹き飛ばす可能性があります。それはこの反応の最初の行でなければなりません...特にそれは非常に多くの票を持っているからです。注意してください! – jerrylroberts

21

RVMを使用している場合は、gemsetsに宝石をインストールできます。そうすれば、完全にクリーンアップを実行したいときに、単にgemsetを削除すれば、そのgemsetにインストールされているすべてのgemが削除されます。あなたのもう一つの選択肢は、未使用の宝石をアンインストールし、bundle installコマンドを再実行することです。

bundlerはproject-per-projectの宝石バージョニングツールであるため、bundle cleanコマンドは提供していません。そうすることは、望ましくない他のプロジェクトに関連した宝石を取り除く可能性を意味します。これは、おそらく、あなたのgemディレクトリを管理するためにbundlerが間違ったツールであることを意味します。私の個人的な提案は、特定のプロジェクトやルビーバージョンであなたの宝石をサンドボックスするためにRVM gemsetsを使うことです。

+40

gemsetを削除する必要はありませ、あなただけの「空gemset_name RVM gemset」と入力してから実行することができ、再び「バンドルをインストール」 。 – JAG

+0

大きな説明。バンドラーが役立つことを知っている。ありがとう。 – Volte

+9

バンドルクリーン - フォースは仕事をします – sailor

1

vendor/bundleに宝石をインストールすると仮定しますか?もしそうなら、すべての宝石を削除して清潔にしないでください。bundle install

+0

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

+0

未使用の宝石を配備時にコピーしないと、それを削除する理由は何ですか?彼らはそれほど広いスペースを占めていません。 –

+0

私はこのレールアプリをイントラネットに導入しています。私はファイルと環境をローカルで処理することを意味します。私がこれに使用できる解決策を知っていれば、分かち合いましょう。 – iGbanam

0

Gemfileから廃止されたGemを削除するだけです。あなたがHerokuについて話しているなら(あなたはそれについて言及していませんでした)、そのファイルの現在の内容を使用するだけで、新しいリリースがコンパイルされます。

+0

これは必ずしも英雄のためではありません。私はレールアプリ自体のサイズを縮小したい。 – iGbanam

10

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

+0

は実際に私を助けなかった、同じエラー。 – holms

+1

私は「--no-deploymentでバンドルインストールを呼び出す必要があります」という噂を止めるためにこれを行う必要がありました。ありがとう – Kevin

+2

アイデアをありがとう。私にとっては、より大きなハンマーを使用することが助けになりました。 'rvm implode --force'を実行してからrvmを再インストールします。 – Ryan

30

RVMを使用している場合は、現在のgemsetにrvm gemset emptyを使用することができます - このコマンドは、現在のgemsetにインストールされているすべてのgemを削除します(gemset自体はそのまま残ります)。実際のバージョンのgemをインストールするには、bundle installを実行してください。 rvm gemset emptyの間にrake、bundlerなどの一般的な宝石類を削除しないように注意してください(その場合はgem installより手作業でbundle installにインストールしてください)。