2011-11-30 29 views
0

有沒有辦法讓Ruby的require語句從github那裏下載文件,而不僅僅是本地文件系統?Ruby需要github的代碼片段

更新:對不起,我應該讓問題更清楚。我想下載一個包含Ruby模塊的文件,並將其導入到我的腳本中,而不是在腳本中下載圖像或其他任意文件。

換句話說這樣的事情

require 'http:\\github.com\myrepo\snippet.rb' 

puts 'hi' 

回答

4

默認情況下,它會下載,這是不可能的。另外,出於安全原因,這不是一個好主意。

您有幾種選擇。如果您要包含的文件是Gem和Git存儲庫,那麼您可以使用Bundler來下載和打包項目中的依賴項。然後你就可以直接在你的源代碼中使用require這個文件。

這是包含外部依賴關係的最好和最安全的方法。

如果您信任源代碼並且您確實知道自己在做什麼,則可以使用Net :: HTTP(或任何其他HTTP庫)下載該文件,並直接在Ruby代碼中評估正文。 您可以將所有內容打包在自定義require_remote函數中。

+0

如上所述,該代碼片段必須位於具有捆綁器的gemspec需要的回購庫中。例如gem'snippets',:git =>'http://github.com/myrepo/snippets.git' – BF4

0

可以包括從Gemfiles內的遠程寶石那麼當您運行bundle install

2

你可以下載和eval它

require "open-uri" 

alias :require_old :require 

def require(path) 
    return false if $".include?(path) 
    unless path=~ /\Ahttp:\/\/ 
     return require_old(path) 
    end 
    eval(open(path).read) 
    $"<< path 
    true 
end 

請注意,這個代碼有沒有錯誤檢查網絡故障不存在的文件,......。我也相信通常這樣要求圖書館不是一個好主意,但這種方法存在安全性和可靠性問題。但是,也許你有一個有效的用例。