【发布时间】:2011-10-25 23:39:12
【问题描述】:
我有一个私人 git 服务器,托管我们开发的 gem。 gem 得到了一些提交,但版本实际上并没有改变。
即使版本没有更改,我如何强制捆绑程序更新我的 gem?
我尝试了“bundle update mygemname”,但没有更新任何内容。
谢谢
【问题讨论】:
标签: ruby-on-rails git bundler
我有一个私人 git 服务器,托管我们开发的 gem。 gem 得到了一些提交,但版本实际上并没有改变。
即使版本没有更改,我如何强制捆绑程序更新我的 gem?
我尝试了“bundle update mygemname”,但没有更新任何内容。
谢谢
【问题讨论】:
标签: ruby-on-rails git bundler
您也可以使用 :ref 选项将 git hashref 直接放在 Gemfile 中
gem 'foo', :git => 'git://github.com/foobar/foo.git', :branch => '0.9-beta', :ref => '9af382ed'
如果您无法控制所述 gem,并且阻止捆绑器为您提供更新版本以防出现重大更改,则特别有用。
【讨论】:
首先,不要那样做。如果你改变了你的 gem,你应该更新它的版本号。否则,只会令人困惑。
但是,如果你真的想这样做,你可以先用巨大的锤子去除你的宝石。
$ gem uninstall foo
$ bundle update
【讨论】:
gem uninstall 将卸载一个 gem,不管它最初是如何安装的。我怀疑您可能不止一次地安装了 gem,可能以 root 身份安装在您用户的个人 gem 目录下,这可能会造成混淆。我当然会建议您使用 rvm 来防止这种情况发生。
这不起作用 - 没有“强制”选项 - 您必须修改 .gemspec 文件并增加版本号,然后执行 gem build ... 和 bundle install
对于 bundler 来说,能够从您的 gem 中读取版本号至关重要,该版本号是在 .gemspec 文件中引入的。这不仅会让 bundler 或 gem update 感到困惑,而且如果您忘记更新 .gemspec 文件中的版本号,也会让人们感到困惑。他们最终会到处乱放 gem 文件,并且无法分辨它们是哪个版本,例如哪个更新? (当然你可以使用 md5-sum,但这不是重点)。
最好的办法是更正 .gemspec 文件中的错误,然后重新发布 gem。
检查捆绑器源代码以获取可用选项:
例如:bundler-1.0.15/lib/bundler/cli.rb
(搜索desc "install")
【讨论】:
bundle update 来更新您的gem 的最新版本!您使用哪个版本的 Rails?如果你有一个 Gemfile,你可以把这个语法 gem 'mygemname' , '>=0.5.0' 看:gembundler.com/man/gemfile.5.html 和 gembundler.com/man/bundle-update.1.html
--force选项(参见this answer),它可以工作。
从 1.11 版开始,bundle install 仅具有一个 --force 选项,即使它们已经安装,也会重新下载每个 gem。
【讨论】:
--redownload,因为它的价值,但使用--force仍然可以正常工作,只是警告它已被弃用。
这没有回答上面的确切问题,但我在 Google 上搜索“如何强制更新捆绑器中的 gem”,结果出现了。
我不是要强制将 gem 更新到 rubygems.org,而是尝试重新安装已安装到本地系统上捆绑路径的 gem。具体来说,我正在尝试使用本机扩展 (nokogiri) 重新安装 gem。
我如何从我的项目中删除它如下;假设您的 --path 是 vendor/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
现在你可以像往常一样运行你的 bundle install 命令了:
bundle install --path vendor/bundle
注意:您当然需要将上面的 2.0.0 更改为您的 ruby 版本。 ls vendor/bundle/ruby 查看捆绑器为哪个版本安装了 gems。
【讨论】: