web-dev-qa-db-ja.com

bundlerを使用してgemを強制的に更新するにはどうすればよいですか?

私が開発したgemをホストしているプラ​​イベートgitサーバーがあります。宝石はいくつかのコミットを取得しましたが、バージョンは実際には変更されませんでした。

バージョンが変更されていない場合でも、バンドラーにgemを更新させるにはどうすればよいですか?

「bundlerupdatemygemname」を試しましたが、何も更新されませんでした。

ありがとう

21
Dominic Goulet

これは機能しません-「強制」オプションはありません-.gemspecファイルを変更し、バージョン番号を増やしてから、gem build ...bundle installを実行する必要があります

Bundlerが、.gemspecファイルで導入されたgemからバージョン番号を読み取れることが重要です。 bundlerやgem updateだけでなく、.gemspecファイルのバージョン番号を更新し忘れた場合にも混乱を招きます。最終的にはgemファイルが横になってしまい、自分がどのバージョンであるかを知ることができなくなります。どちらが新しいですか? (もちろん、md5-sumを使用することもできますが、それはここでのポイントの脇にあります)。

最善の方法は、.gemspecファイルの誤りを修正し、gemを再リリースすることです。

利用可能なオプションについては、バンドラーのソースコードを確認してください。

例:bundler-1.0.15/lib/bundler/cli.rb

desc "install"を検索してください)

13
Tilo

:refオプションを使用して、githashrefをGemfileに直接配置することもできます。

gem 'foo', :git => 'git://github.com/foobar/foo.git', :branch => '0.9-beta', :ref => '9af382ed'

上記のgemを制御できない場合に特に役立ち、重大な変更があった場合にbundlerが新しいバージョンを提供しないようにします。

25
sbeam

まず第一に、それをしないでください。 gemを変更する場合は、バージョン番号を更新する必要があります。そうでなければ、それはただ混乱しています。

ただし、本当にこれを実行したい場合は、最初に宝石を取り除く巨大なハンマーを適用できます。

$ gem uninstall foo
$ bundle update
15
jdl

バージョン1.11からbundle install--forceオプションがインストールされている場合でも、すべてのgemを再ダウンロードします。

9
Nowhere man

これは上記の正確な質問には答えませんが、Googleで「BundlerでGemを強制的に更新する方法」を検索していたところ、この問題が発生しました。

Gemをrubygems.orgに強制的に更新しようとしているのではなく、ローカルシステムのバンドルパスにインストールされているgemを再インストールしようとしています。具体的には、ネイティブ拡張子(nokogiri)を使用してgemを再インストールしようとしています。

プロジェクトから削除した方法は次のとおりです。 --pathvendor/bundleであり、プロジェクトのルートにいると仮定して、次を実行します。

find vendor/bundle/Ruby/2.0.0 -name "*nokogiri*" -depth 2

これらのファイル/ディレクトリがnokogiriに固有であることを確認してから、次のコマンドで削除します。

find vendor/bundle/Ruby/2.0.0 -name "*nokogiri*" -depth 2 | xargs rm -rf

これで、通常どおりbundleinstallコマンドを実行できます。

bundle install --path vendor/bundle

注:もちろん、上の2.0.0をRuby version。ls vendor/bundle/Rubyに変更して、どのバージョンのバンドルがgemをインストールしたかを確認する必要があります。にとって。

6
Eric Boehs