我正在研究一个宝石,它在github上。
当我在应用程序中包含gem时,执行capistrano部署,并(在服务器上)运行:
bundle outdated
我明白了:
* authengine (0.0.1 d8baa49 > 0.0.1 de43dfa)
告诉我可以使用更新的提交。为什么捆绑更新(capistrano部署的一部分)没有拉出更新的版本?主机应用程序的Gemfile中没有版本约束,无论如何它们具有相同的版本号,只是不同的提交。
即使我登录服务器并运行
bundle update authengine
之后我得到了相同的“过时”结果 我在这里缺少什么?
答案 0 :(得分:15)
我发现可能导致这种情况的一件事是,如果捆绑中的其他宝石按照不兼容的版本对宝石提出要求。 Bundler试图通过选择宝石的版本来协调这些,这样他们的要求都可以满足。结果是它悄然拒绝更新宝石。
检查的方法是在Gemfile中设置显式版本要求。像
这样的东西gem "authengine", "> 0.0.2" #(you'll need to bump the version to make this work)
#or
gem "authengine", :ref => "d8baa49"
然后运行
bundle update authengine
您应该看到类似的内容(这取自我的具体情况):
Bundler找不到gem“json”的兼容版本:In 的Gemfile: 厨师(> 10.8)红宝石依赖 json(< = 1.6.1,> = 1.4.4)ruby
logical-construct (>= 0) ruby depends on json (1.7.5)
因此,在我的情况下,明确要求更新版本的json是一个问题。
答案 1 :(得分:2)
运行bundle update authengine
时返回的输出是什么?它真的说它更新了宝石吗?还是忽略了宝石?
您可以尝试使用--source
参数专门告诉Bundler使用git存储库。那,或者你的
bundle update authengine --source https://github.com/mustardseeddatabase/authengine.git
此外,当出现意想不到的事情时,我总喜欢清理我的gemlist。可能是你仍然有旧版本的宝石,而不是在捆绑器中使用。
所以你可以这样做:
gem list
gem check
gem cleanup
或者完全重新安装
gem uninstall authengine
bundle install
答案 2 :(得分:2)
作者AndréArko,stated在2014年:
Bundler解析器绝对是一项正在进行的工作,我们会进行调整 特定版本之间的权衡和基于的快速解决 用户反馈。
Bundler一直没有提供最新版本的 每个宝石都存在于它的整个存在,它确实导致了它 很多门票正在打开。在大多数情况下,事实证明是 Bundler必须在一个宝石的最新版本之间进行选择 或者不同的宝石,Bundler选择用户不关心的宝石 关于拥有最新版本的。这就是为什么它如此重要 使您的Gemfile版本要求准确反映您的实际情况 要求。
我认识到你的假设是Bundler会给你的 最新版本似乎在当时有效,但仅限于文档 说你会得到一个符合你要求的版本,而不是 最新。我们可以在任何地方扩展文档以使其更清晰 一切的最新版本根本不可行?