我想编写一个执行两件事的Ruby方法:
确定当前稳定版本的Ruby是什么。我的第一个想法是从https://www.ruby-lang.org/en/downloads/获得响应并使用RegEx来隔离短语The current stable version is [x]
。是否有我不知道的API?
获取URL以下载该版本的.tar.gz。为此,我在思考同样的事情,从站点URL的输出中获取它。
我正在寻找关于最好的方法的建议,或者如果有可能用来确定我想要的结果的方向,我会寻找方向。
答案 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
答案 2 :(得分:1)
另一种可能性是使用Ruby源代码库。检查每个分支中的version.h
,按RUBY_PATCHLEVEL > -1
过滤(-1
用于-dev
版本),按RUBY_VERSION
排序,然后选择最新版本。
答案 3 :(得分:0)
您可以使用:
curl
或wget
来检索文件。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的例子。