如何确定某个gem是否与某个Ruby版本兼容?
我想升级我正在开发的一个应用程序的Ruby版本,但我没有看到一个可靠的方法来知道某个gem支持哪个Ruby版本。
我找到了gem的*.gemspec
,它通常包含一个名为config.required_ruby_version ...
的配置,但我注意到并不是所有的gem都包含gemspec文件。我注意到我的系统上有一些gem,例如ActiveRecord,它们没有Gemfile,而在GitHub上,我们有一个可用的gemspec
文件。
这是我本地机器上的ls -lrth
的输出:
Einstiens-MacBook-Pro:activerecord-4.2.7.1 superhero$ ls -lrth
total 128
-rw-r--r-- 1 superhero jingle 51K Dec 23 00:07 CHANGELOG.md
-rw-r--r-- 1 superhero jingle 1.0K Dec 23 00:07 MIT-LICENSE
-rw-r--r-- 1 superhero jingle 6.6K Dec 23 00:07 README.rdoc
drwxr-xr-x 4 superhero jingle 128B Dec 23 00:07 examples
drwxr-xr-x 5 superhero jingle 160B Dec 23 00:07 lib
ActiveRecord repository有一个gemspec
文件:
发布于 2019-01-09 17:25:09
查找gemspec
文件并检查RubyGems.org是检查Ruby兼容性的好方法,但如上所述,如果gem作者没有编写gemspec
文件,这将是无用的。
如果您使用的是Ruby版本管理系统,比如RVM或rbenv,那么编写一个简单的测试脚本将是一种解决方案。如果您的本地计算机上已经安装了Ruby2.4.1和2.5.1版,请编写一个类似于"Testing With Multiple Ruby And Gem Versions“的脚本,如下所示:
#!/usr/bin/env bash
set -e
rubies=("ruby-2.4.1" "ruby-2.5.3")
for i in "${rubies[@]}"
do
echo "====================================================="
echo "$i: Start Test"
echo "====================================================="
rvm $i exec bundle
rvm $i exec bundle exec rake test
echo "====================================================="
echo "$i: End Test"
echo "====================================================="
done
RVM将选择一个Ruby版本并为选定的Ruby版本运行测试。
如果gem没有任何单元测试,那么这个测试脚本也是无用的。但是,没有任何单元测试的gem将不值得使用。
尽管这种解决方案也不是检查兼容Ruby版本的可靠方法,但它值得用于测试。
发布于 2019-01-06 22:24:03
我建议看看宝石的RubyGems page。在左列中,您将找到所需的Ruby版本。对于Ruby,你至少需要ActiveRecord >= 1.9.3
。
但请记住,这只会告诉您最低版本号。因为在特定版本发布时,开发人员不能断定Ruby的某个未来版本是否会引入破坏性的更改。
对于支持的最高版本,您必须调查发行说明或问题。在您的示例中,您将找到一篇文章"This Week in Rails: Ruby 2.4 on Rails 4.2“,该文章介绍了Rails 4.2.8添加了对Ruby2.4的支持。因此,我猜测Rails 4.2.7只支持Ruby2.3。
发布于 2019-01-09 16:24:19
我在Rubygems.org上发现了一些更有趣的东西,它可以作为一个API来呈现关于gem的JSON/XML响应。
通常在Rubygems.org中提到,而不是在gemspec
文件中提到Ruby版本兼容性。
这是获取它的一次性方法:
curl https://rubygems.org/api/v2/rubygems/activerecord/versions/4.2.7.1.json
{
"name": "activerecord",
"downloads": 163190934,
"version": "4.2.7.1",
"version_downloads": 6061660,
"platform": "ruby",
"authors": "David Heinemeier Hansson",
"info": "Databases on Rails. Build a persistent domain model by mapping database tables to Ruby classes. Strong conventions for associations, validations, aggregations, migrations, and testing come baked-in.",
"licenses": [
"MIT"
],
"metadata": {},
"sha": "923a64e2ebb9c4529761bf65ed37601a7000af2f3b18f12ea00e9f9ba2a168d2",
"project_uri": "https://rubygems.org/gems/activerecord",
"gem_uri": "https://rubygems.org/gems/activerecord-4.2.7.1.gem",
"homepage_uri": "http://rubyonrails.org",
"wiki_uri": null,
"documentation_uri": "http://www.rubydoc.info/gems/activerecord/4.2.7.1",
"mailing_list_uri": null,
"source_code_uri": null,
"bug_tracker_uri": null,
"changelog_uri": null,
"dependencies": {
"development": [],
"runtime": [
{
"name": "activemodel",
"requirements": "= 4.2.7.1"
},
{
"name": "activesupport",
"requirements": "= 4.2.7.1"
},
{
"name": "arel",
"requirements": "~> 6.0"
}
]
},
"built_at": "2016-08-10T00:00:00.000Z",
"created_at": "2016-08-11T17:33:45.486Z",
"description": "Databases on Rails. Build a persistent domain model by mapping database tables to Ruby classes. Strong conventions for associations, validations, aggregations, migrations, and testing come baked-in.",
"downloads_count": 6061660,
"number": "4.2.7.1",
"summary": "Object-relational mapper framework (part of Rails).",
"rubygems_version": ">= 0",
"ruby_version": ">= 1.9.3",
"prerelease": false,
"requirements": []
}
并提取ruby_version
。
有关详细信息,请参阅API documentation。
https://stackoverflow.com/questions/54061319
复制相似问题