ruby - Gem.latest_version_for(name) 方法的奇怪结果
问题描述
我正在研究与 gem 相关的实用程序,并且使用 Gem.latest_version_for 方法观察到了奇怪的结果。以下是irb下的一些观察:
irb(main):001:0> Gem.latest_version_for('rails').to_s
=> "5.2.2"
irb(main):002:0> Gem.latest_version_for('gosu').to_s
=> "0.7.38"
请注意第一行如何获得正确版本的 rails, 5.2.2 我写这篇文章并与 rubygems.org 检查确认了这一点。gosu gem 的查询返回 0.7.38,这是非常错误的。正确答案应该是 0.14.4
我无法解释这里发生了什么。
我可以确认我的主机是https://rubygems.org并且
C:\Sites\mysh
8 mysh>ruby --version
ruby 2.3.3p222 (2016-11-21 revision 56859) [i386-mingw32]
C:\Sites\mysh
9 mysh>gem --version
2.5.2
解决方案
平台可用的最新版本i386-mingw32
是 0.7.38。您会注意到这与您报告的 ruby 版本一致。
https://rubygems.org/gems/gosu/versions
latest_version_for
调用latest_spec_for
,Gem::SpecFetcher.spec_for_dependency
它只使用 gem 的名称作为参数进行调用。spec_for_dependency
接受另一个参数,matching_platform
默认为真。
它看起来像是latest_version_for
通过该链限定在您当前的平台上,matching_platform
默认值。该gem install
命令可能会将 i386/x386 视为相同/等效并允许它们。
if matching_platform is false, gems for all platforms are returned
您应该能够镜像该latest_spec_for
方法并传入multi_platform
要覆盖的参数。就像是
dependency = Gem::Dependency.new name
fetcher = Gem::SpecFetcher.fetcher
spec_tuples, _ = fetcher.spec_for_dependency dependency, true # true added here
推荐阅读
- branch.io - 无法使用 branch.io API 更新 branch.io 链接
- c - printf:如何在小数点上对齐数字
- java - Spring Repository 库实现问题
- laravel - 使用具有模型属性的 hasMany 关系
- java - 人脸验证以编程方式解锁我的应用
- c++ - 不应该 iterator_traits
::iterator>::iterator_category 是 input_iterator_tag? - ajax - Phoenix/Elixir:带有前端应用程序的 CSRF
- clojure - 如何在 Clojure 中使用 continue
- ansible - 允许具有有限权限的 AWX 用户编辑模板上的通知设置
- sql-server - pyodbc - SQL Server 不存在或访问被拒绝问题