【问题标题】:How can I determine what the current stable version of Ruby is?如何确定 Ruby 的当前稳定版本是什么?
【发布时间】:2014-12-05 20:31:32
【问题描述】:

我想写一个 Ruby 方法来做两件事:

  1. 确定 Ruby 的当前稳定版本是什么。我的第一个想法是从https://www.ruby-lang.org/en/downloads/ 获得响应并使用RegEx 来隔离短语The current stable version is [x]。是否有我不知道的 API?

  2. 获取 URL 以下载该版本的 .tar.gz。为此,我在想同样的事情,从站点 URL 的输出中获取它。

我正在寻找有关最佳方式的建议,或者如果有什么合适的地方可以用来确定我想要的结果的方向。

【问题讨论】:

  • 你是对的,顺便说一句。应该有一个API。 API 可以像 http://ruby-lang.org/latestversion.txt 的静态 .txt 文件一样简单,带有 ASCII 字符串 2.1.5-p274 或类似的东西。

标签: ruby


【解决方案1】:

获取下载页面的 Ruby 代码,然后解析当前版本和链接 URL:

html = Net::HTTP.get(URI("https://www.ruby-lang.org/en/downloads/"))
vers = html[/http.*ruby-(.*).tar.gz/,1]
link = html[/http.*ruby-.*.tar.gz/]

GitHub代码:ruby-stable-version.rb
外壳代码: ruby-stable-version

【讨论】:

  • 简单优雅,依赖最小。谢谢!我只需要注意确保在 URL 中首次提及的 Ruby URL 是当前稳定且适合我的平台的。
【解决方案2】:

如果您使用的是 rbenv,您可以使用 ruby​​-build 来获取 ruby​​ 版本列表,然后使用 grep 对其进行处理。

ruby-build --definitions | tail -r | grep -x -G -m 1 '[0-9]\.[0-9].[0-9]\-*[p0-9*]*'

然后您可以像这样在代码中使用它:

version = `ruby-build --definitions | tail -r | grep -x -G -m 1 '[0-9]\.[0-9].[0-9]\-*[p0-9*]*'`.strip

然后您可以使用此值来获取下载 URL。

url = "http://cache.ruby-lang.org/pub/ruby/#{version[0..2]}/ruby-#{version}.tar.gz"

然后下载文件:

require 'open-uri'
open("ruby-#{version}.tar.gz", 'wb') do |file|
  file << open(url).read
end

详细了解rbenv hereruby-build here

【讨论】:

  • 是的,你可以在没有 rbenv 的情况下使用 brew 安装它:brew install ruby-build
【解决方案3】:

另一种可能性是使用 Ruby 源代码库。在每个分支中检查version.h,按RUBY_PATCHLEVEL &gt; -1 过滤(-1 用于-dev 版本),按RUBY_VERSION 排序并取最新的。

【讨论】:

    【解决方案4】:

    你可以使用:

    • Ruby 内置的OpenURINokogiri,用于读取页面、解析页面、搜索特定标签、提取“src”或“href”等参数。
    • OpenURI 读取 URL,或在命令行中使用 curlwget 检索文件。

    Nokogiri 的教程包括展示如何使用 OpenURI 检索页面并将其交给 Nokogiri。

    OpenURI 的文档展示了如何使用read“打开”URL 并检索其内容。完成此操作后,使用类似文本文件的方式将数据轻松保存到磁盘:

    File.write('some_file', open('http://www.example.com/').read)
    

    或二进制:

    File.open('some_file', 'wb') { |fo| fo.write(open('http://www.example.com/').read) }
    

    在 Stack Overflow 上都有同时使用 Nokogiri 和 OpenURI 的示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-01
      • 2010-12-09
      • 1970-01-01
      相关资源
      最近更新 更多