如何确定当前稳定版本的Ruby是什么?

时间:2014-12-05 20:31:32

标签: ruby

我想编写一个执行两件事的Ruby方法:

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

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

  3. 我正在寻找关于最好的方法的建议,或者如果有可能用来确定我想要的结果的方向,我会寻找方向。

4 个答案:

答案 0 :(得分:2)

用于获取下载页面的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

答案 1 :(得分:1)

如果您使用的是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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

您可以使用:

  • Ruby的内置OpenURINokogiri,用于阅读页面,解析页面,搜索某些标签,提取参数,例如&#34; src&#34 ;或&#34; href&#34;。
  • OpenURI用于读取URL,或在命令行中使用curlwget来检索文件。

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

OpenURI的文档展示了如何打开&#34;网址并使用read检索其内容。完成上述操作后,可以使用类似文本文件的方式将数据轻松保存到磁盘:

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的例子。