2014-12-05 58 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排序並採用最新的一個。

相關問題