我正在开发一个 gem,它在 github 上。
当我在应用程序中包含 gem 时,进行 capistrano 部署,然后(在服务器上)运行:
bundle outdated
我明白了:
* authengine (0.0.1 d8baa49 > 0.0.1 de43dfa)
这告诉我有更新的提交可用。为什么 bundle 更新(capistrano 部署的一部分)不提取更新的版本?宿主应用程序的 Gemfile 中没有版本限制,无论如何它们具有相同的版本号,只是不同的提交。
即使我登录服务器并运行
bundle update authengine
之后我得到了相同的“过时”结果。
我在这里缺少什么?
最佳答案
我发现可能导致此问题的一件事是,如果 bundle 中的其他 gem 按不兼容的版本对 gem 提出要求。 Bundler 试图通过选择 gem 的版本来协调这些,以便满足他们的要求。结果是它悄悄地拒绝更新 gems。
检查的方法是在 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 could not find compatible versions for gem "json": In Gemfile: chef (> 10.8) ruby depends on json (<= 1.6.1, >= 1.4.4) ruby
logical-construct (>= 0) ruby depends on json (1.7.5)
因此,在我的例子中,明确要求更新版本的 json 是一个问题。
关于ruby - 为什么 bundle 更新后 gem 仍然过时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11159282/