有沒有辦法讓Ruby的require語句從github那裏下載文件,而不僅僅是本地文件系統?Ruby需要github的代碼片段
更新:對不起,我應該讓問題更清楚。我想下載一個包含Ruby模塊的文件,並將其導入到我的腳本中,而不是在腳本中下載圖像或其他任意文件。
換句話說這樣的事情
require 'http:\\github.com\myrepo\snippet.rb'
puts 'hi'
有沒有辦法讓Ruby的require語句從github那裏下載文件,而不僅僅是本地文件系統?Ruby需要github的代碼片段
更新:對不起,我應該讓問題更清楚。我想下載一個包含Ruby模塊的文件,並將其導入到我的腳本中,而不是在腳本中下載圖像或其他任意文件。
換句話說這樣的事情
require 'http:\\github.com\myrepo\snippet.rb'
puts 'hi'
默認情況下,它會下載,這是不可能的。另外,出於安全原因,這不是一個好主意。
您有幾種選擇。如果您要包含的文件是Gem和Git存儲庫,那麼您可以使用Bundler來下載和打包項目中的依賴項。然後你就可以直接在你的源代碼中使用require
這個文件。
這是包含外部依賴關係的最好和最安全的方法。
如果您信任源代碼並且您確實知道自己在做什麼,則可以使用Net :: HTTP(或任何其他HTTP庫)下載該文件,並直接在Ruby代碼中評估正文。 您可以將所有內容打包在自定義require_remote
函數中。
可以包括從Gemfiles
內的遠程寶石那麼當您運行bundle install
你可以下載和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
請注意,這個代碼有沒有錯誤檢查網絡故障不存在的文件,......。我也相信通常這樣要求圖書館不是一個好主意,但這種方法存在安全性和可靠性問題。但是,也許你有一個有效的用例。
如上所述,該代碼片段必須位於具有捆綁器的gemspec需要的回購庫中。例如gem'snippets',:git =>'http://github.com/myrepo/snippets.git' – BF4