首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检查gem的兼容Ruby版本

如何检查gem的兼容Ruby版本
EN

Stack Overflow用户
提问于 2019-01-06 20:06:54
回答 3查看 2.8K关注 0票数 1

如何确定某个gem是否与某个Ruby版本兼容?

我想升级我正在开发的一个应用程序的Ruby版本,但我没有看到一个可靠的方法来知道某个gem支持哪个Ruby版本。

我找到了gem的*.gemspec,它通常包含一个名为config.required_ruby_version ...的配置,但我注意到并不是所有的gem都包含gemspec文件。我注意到我的系统上有一些gem,例如ActiveRecord,它们没有Gemfile,而在GitHub上,我们有一个可用的gemspec文件。

这是我本地机器上的ls -lrth的输出:

代码语言:javascript
运行
复制
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文件:

EN

回答 3

Stack Overflow用户

发布于 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“的脚本,如下所示:

代码语言:javascript
运行
复制
#!/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版本的可靠方法,但它值得用于测试。

票数 2
EN

Stack Overflow用户

发布于 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。

票数 0
EN

Stack Overflow用户

发布于 2019-01-09 16:24:19

我在Rubygems.org上发现了一些更有趣的东西,它可以作为一个API来呈现关于gem的JSON/XML响应。

通常在Rubygems.org中提到,而不是在gemspec文件中提到Ruby版本兼容性。

这是获取它的一次性方法:

代码语言:javascript
运行
复制
curl https://rubygems.org/api/v2/rubygems/activerecord/versions/4.2.7.1.json
代码语言:javascript
运行
复制
{
  "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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54061319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档