rb-inotify 的更新是否在 Ruby 1.x 上打破了罗盘?

Did the update to rb-inotify just break compass on Ruby 1.x?

12 月 15 日 the rb-inotify gem was updated to the version 0.10.0 which now requires Ruby 2.2 or later. The compass gem 具有 rb-inotify >= 0.9 的运行时依赖项,现在似乎自动包含版本 0.10.0。因此在Ruby 1.9.3上安装compass时,rb-inotify安装失败,导致compass安装失败。

我的理解正确吗? rb-inotify 现在是否已在 Ruby 1.x 上破坏了像 gem install compass 这样的简单命令?在不更新 Ruby 的情况下解决此问题的最佳方法是什么?

Have I understood this correctly? Has rb-inotify now broken simple commands like gem install compass on Ruby 1.x?

不,不是rb-inotify破坏了任何东西。

compass gem 依赖于 rb-inotify >= 0.9,这意味着 compass gem 的作者声称 Compass 将与 未来发布的每个版本,甚至从现在开始的 10000 年,无论有多少变化。正如您所发现的,这种说法是错误的,所以问题出在 Compass,而不是 rb-inotify。

我在 rb-inotify 主页上找不到版本控制策略,因此依赖任何特定的版本控制策略(尤其是依赖 "there will never be backwards-incompatible changes, ever")都是错误的。即使我们假设 rb-inotify 遵循 SemVer,实际上 SemVer 在 1.0 之前允许任意更改。

简而言之:Compass中的gem依赖是错误的。最多应该是rb-inotify == 0.9.0rb-inotify ~> 0.9.0,但显然不是"any version newer than 0.9.0, no matter how many changes there are".

What is the best way to fix this without updating Ruby?

如果您安装 rb-inotify 版本 0.9.0 并且只安装那个版本(或者至少没有更新的版本)之前安装 Compass,那么 gem 要求就已经满足,并且 RubyGems 不会尝试安装任何更新版本的 rb-inotify(除非并且直到您安装另一个 gem需要更高版本)。


现在,一个你没有问过的问题:

What is the best way to fix this?

您真的应该考虑更新您的 Ruby 安装。我假设 "Ruby 1.9.3",你实际上是指 "YARV 1.9.3",自 2015 年 2 月 23 日以来,它没有得到维护、更新、收到错误修复,最重要的是收到安全修复。