我想知道如何确定特定的宝石是否与特定的红宝石版本兼容。 我想升级正在处理的应用程序的Ruby版本。但是我没有看到一种了解特定宝石支持哪种红宝石版本的真实方法。
我首先找到了宝石的*.gemspec
,该宝石经常(不是总是)包含一个配置config.required_ruby_version ...
但是我注意到并不是所有的gems都包含一个gemspec文件,例如,我注意到我的系统(activerecord)上有一些gems,但缺少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
这里是link to the Activerecord repository,下面是截屏,其中非常包含一个gemspec
文件
答案 0 :(得分:1)
查找gemspec
文件和rubygems是检查ruby兼容的好方法,但是如上所述,如果gem作者不编写gemspec
文件,这将毫无用处。
如果您使用rvm
和rbenv
之类的红宝石版本管理系统,则编写简单的测试脚本将是一个解决方案。如果您的本地计算机上已经安装了Ruby版本2.4.1
和2.5.1
,请按如下所示编写test script。
#!/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
将选择一个红宝石版本,并对选定的红宝石版本进行测试。
如果gem没有任何单元测试,则该测试脚本也将无用。但是没有任何单元测试的gem不值得使用。
尽管如此,该解决方案也不是检查兼容红宝石版本的可靠方法,值得您进行测试。
答案 1 :(得分:0)
我建议您查看宝石的rubygems page。在左栏中,您将找到所需的Ruby版本。对于activerecord
,您至少需要Ruby >= 1.9.3
。
但是请记住,这仅告诉您最低版本号。因为在发布特定版本时,开发人员无法确定将来某个特定版本的Ruby是否可能带来重大更改。
对于受支持的最高版本,您必须调查发行说明或问题。在您的示例中,您将找到article,Rails 4.2.8添加了对Ruby 2.4的支持。因此,我猜想Rails 4.2.7仅支持Ruby 2.3。
答案 2 :(得分:0)
在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://guides.rubygems.org/rubygems-org-api-v2/