如何使用bundler强制更新gem?

Dom*_*let 20 git ruby-on-rails bundler

我有一个私人git托管我们开发的宝石.宝石有一些提交,但版本实际上没有改变.

即使版本没有更改,我如何强制捆绑器更新我的gem?

我尝试了"bundler update mygemname",但它没有更新任何内容.

谢谢

sbe*_*eam 25

你也可以使用:ref选项将git hashref放在Gemfile中

gem 'foo', :git => 'git://github.com/foobar/foo.git', :branch => '0.9-beta', :ref => '9af382ed'
Run Code Online (Sandbox Code Playgroud)

如果您无法控制所述gem,则特别有用,并且如果存在重大更改,则捆绑器不会为您提供更新版本.


jdl*_*jdl 15

首先,不要这样做.如果更改gem,则应更新其版本号.否则,这只是令人困惑.

但是,如果你真的想要这样做,你可以先用巨大的锤子去除你的宝石.

$ gem uninstall foo
$ bundle update
Run Code Online (Sandbox Code Playgroud)


Til*_*ilo 12

这将无法正常工作 - 没有"强制"选项 - 您必须修改.gemspec文件并增加版本号,然后执行gem build ...,并且bundle install

对于bundler来说,能够从gem中读取版本号是至关重要的,这是在.gemspec文件中引入的.gem update如果您忘记更新.gemspec文件中的版本号,它不仅会令人困惑,也会让人感到困惑.他们最终会有宝石文件,并且不能分辨出它们是哪个版本,例如哪一​​个更新?(当然你可以使用md5-sum,但这不是重点).

最好的办法是纠正.gemspec文件中的错误,然后重新发布gem.

检查bundler源代码以获取可用选项:

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

(搜索desc "install")

  • 你总是可以运行`bundle update`来更新你宝石的最新版本!你使用哪个版本的Rails?如果你有一个Gemfile,你可以把这个语法`gem'mygemname','> = 0.5.0'`参见:http://gembundler.com/man/gemfile.5.html和http://gembundler.com /man/bundle-update.1.html (2认同)

Now*_*man 9

从版本1.11开始,bundle install只有一个--force选项可以重新下载每个gem,即使它们已经安装.

  • 这个标志现在被命名为“--redownload”,因为它的价值,但使用“--force”仍然可以正常工作,只是警告它已被弃用。 (2认同)

Eri*_*ehs 6

这并没有回答上面的确切问题,但我在谷歌搜索"如何强制更新捆绑包中的宝石",这就出现了.

我不是试图强制更新gem到rubygems.org,而是我试图重新安装一个安装在我本地系统上的bundle路径的gem.具体来说,我正在尝试重新安装带有原生扩展(nokogiri)的gem.

我如何从项目中删除它如下; 假设您--pathvendor/bundle并且您在项目的根目录中运行:

find vendor/bundle/ruby/2.0.0 -name "*nokogiri*" -depth 2
Run Code Online (Sandbox Code Playgroud)

验证这些文件/目录是否特定于nokogiri,然后使用以下命令删除它们:

find vendor/bundle/ruby/2.0.0 -name "*nokogiri*" -depth 2 | xargs rm -rf
Run Code Online (Sandbox Code Playgroud)

现在您可以像往常一样运行bundle install命令:

bundle install --path vendor/bundle
Run Code Online (Sandbox Code Playgroud)

注意:您当然需要将2.0.0上面的内容更改为您的ruby版本.ls vendor/bundle/ruby查看哪个版本的捆绑包已经安装了宝石.