ruby - 为什么 bundle 更新后 gem 仍然过时

标签 ruby rubygems bundler

我正在开发一个 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/

相关文章:

mysql - 将 Ruby API 请求信息记录到数据库

ruby - 在 Ruby 的 BigDecimal 中是否使用 String 或 Integer

ruby - 如何使用 Ruby 和 Nokogiri 解析 Google 图片 URL?

ruby-on-rails - Apache/Passenger 服务器上的 "no such file to load -- bundler/setup"

ruby-on-rails - Rails 部分渲染和设计 Action

ruby-on-rails - 如何区分 xlsx 和 docx 文件与 zip 文件?

ruby - 如何在 Jupyter notebook 中需要 ruby​​ gems?

ruby-on-rails - Rails 3's "bundle install” 非常快(需要 1 秒),但之后没有 Rails?(使用 rvm)

ruby - 在 ruby​​ Gemfile 中指定 gem 的可选依赖项的正确方法

ruby-on-rails - 无法在生产中 bundle