旧宝石总是在更新版本的ruby上工作吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了旧宝石总是在更新版本的ruby上工作吗?相关的知识,希望对你有一定的参考价值。

我使用的是最新版本的ruby(2.5.1),但是有些旧宝石。我有一些问题。我想知道,一些宝石只适用于某些版本的红宝石是否正确?

如果一个gem使用ruby 2.3.0,那么它肯定适用于2.5.1(即因为2.5.1> 2.3.0)吗?或者情况并非总是如此?

我想我要问的是更新的红宝石版本总是向后兼容旧宝石?

答案

如果一个gem使用ruby 2.3.0,那么它肯定适用于2.5.1

这是不正确的。编程语言在不断发展中不断发展。这意味着语言维护者正在进行大量改进或重构,因为它们是新功能或从语言中删除旧组件。当语言社区宣布新功能或删除ruby中的旧功能(如Fixnum)时,开发人员应遵循说明并相应地重构其代码库。换句话说,开发人员应该有一个很好的测试覆盖率来检测任何失败并立即修复它。

在您的场景中,我理解您没有测试覆盖率。唯一但简单的事情就是将你的宝石版本升级到最新版本。

另一答案

Gem只是一个用Ruby编写的插件库。

当然,Ruby正在开发中,新功能正在出现,旧功能正在消失。

最好在.gemspec文件中指定Ruby版本。例如,like this one

但如果没有,那么你必须手动检查性能。所以你可以阅读gem源代码或尝试使用你的gem并检查它。

当然,对于自动化,最好使用测试。

另一答案

Starting at Ruby 2.1.0的版本策略是MINOR版本的更改可能会引入API中断更改。

如果任何宝石碰巧使用更改的API,则会出现不兼容的情况。

MINOR版本号在2.3.*2.5.*之间已经改变了两次,所以即使宝石碰巧是根据记录的API编写的,也不能保证它会继续工作,除非宝石的维护者花费精力测试宝石(和必要时升级它。自动化测试套件有很多帮助。

记录实际测试的版本兼容性的标准方法是qazxsw poi。

有趣的是,如果一个特定的宝石写得非常糟糕,我想它可能会在兼容的Ruby版本之间实现收支平衡。这不是我在Ruby生态系统中遇到过的东西,但我有by providing required_ruby_version in .gemspec files(而Java因其向后兼容性而闻名),我自己的代码偶然使用了一个不属于API的类。有很多宝石。谁知道那里有什么? :)

以上是关于旧宝石总是在更新版本的ruby上工作吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 RVM 更新 Ruby 解释器?

Rails:旧数据与新数据不匹配时如何更新片段缓存

无法在ruby 1.8.7-p374中安装宝石

带有红宝石集合/可枚举的酷技巧和富有表现力的片段[关闭]

红宝石“错误恢复下一个”功能

更新旧宝石到现在