2010-11-25 46 views
3

我想創建一個程序使用紅寶石(和Net :: SSH)連接到服務器並執行一些任務。服務器的細節要提供的東西,如:如何在ruby中處理URL以提取組件部分(方案,用戶名,密碼,主機等)?

ssh://user:[email protected]:port (for a host that does not yet have SSH keys) 

[email protected] 

的Net :: SSH期望的格式如下:

Net::SSH.start('host', 'user', :password => "password") 

的是,有寶石/ STDLIB可以將URL處理爲這種格式?或者一個簡單的正則表達式可以匹配不同的部分?

注:我知道,並使用,capistrano,但在這種情況下,我需要較低級別的控制。

回答

11

URIAddressable::URI都可以解析URL並讓它們分解成它們的組件。

URI包含在Ruby的標準庫中,這很好,但Addressable :: URI有更多的功能,當我需要做很多關於URL的工作時,我使用它。

require 'addressable/uri' 

uri = Addressable::URI.parse('ssh://user:[email protected]:81') 
uri.host # => "www.example.com" 
uri.user # => "user" 
uri.password # => "pass" 
uri.scheme # => "ssh" 
uri.port # => 81 

require 'uri' 
uri = URI.parse('ssh://user:[email protected]:81') 
uri.host # => "www.example.com" 
uri.user # => "user" 
uri.password # => "pass" 
uri.scheme # => "ssh" 
uri.port # => 81 
+0

儘管URI只顯示'user @ host',但它顯然不起作用。這解釋了我昨天在試問問題之前如何設法嘗試它,並認爲它沒有提取組件。 (經過測試 - 也沒有addressable/uri) – 2010-11-25 22:09:58

0

有一個URI類應該有所幫助。您可能需要手動將ssh方案替換爲http,但我並不認爲URI瞭解ssh方案。

相關問題