2014-12-05 60 views
1

我想写一个Ruby方法做两件事情:如何确定当前稳定版本的Ruby是什么?

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

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

我正在寻找咨询约去了解它,或者如果方向有什么东西在地方,我可能会用它来确定我想要的结果的最佳方式。

+1

你是对的,顺便说一句。应该有一个这样的API。 API可以像在http:// ruby​​-lang.org/ latestversion.txt中使用ASCII字符串“2.1.5-p274”或类似的静态'.txt'文件一样简单。 – 2014-12-05 23:34:13

回答

1

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

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
shell代码: ruby-stable-version

+0

简单而优雅,对依赖程度最小。谢谢!我只需留意一下,确保在URL处首次提到Ruby URL是当前稳定且适合我的平台的。 – 2014-12-06 04:01:07

0

您可以使用:

  • 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) } 

有同时使用引入nokogiri和实例OpenURI遍布全部堆栈溢出。

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 = "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

+0

如果没有rbenv,ruby-build工作吗? – joelparkerhenderson 2014-12-06 01:54:39

+0

是的,你可以在没有rbenv的情况下使用brew进行安装:'brew install ruby​​-build' – 2014-12-06 02:30:23

1

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

相关问题