有没有得到Ruby的require语句从github而不仅仅是本地文件系统下载文件?
更新:对不起我应该让问题更清楚。我想下载一个包含Ruby模块的文件并将其导入我的脚本,而不是仅仅在我的脚本中下载图像或其他任意文件。
换句话说就像这样
require 'http:\\github.com\myrepo\snippet.rb'
puts 'hi'
答案 0 :(得分:4)
默认情况下,这是不可能的。此外,出于安全原因,这不是一个好主意。
你有几种选择。如果要包含的文件是Gem和Git存储库,则可以使用Bundler下载并打包项目中的依赖项。然后,您就可以直接在源代码中require
文件。
这是包含外部依赖关系的最佳和最安全的方法。
如果您信任源并且您确实知道自己在做什么,则可以使用Net :: HTTP(或任何其他HTTP库)下载文件,并直接在Ruby代码中评估主体。
您可以将所有内容打包到自定义require_remote
函数中。
答案 1 :(得分:2)
你可以下载并评估它
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
请注意,此代码没有错误检查网络中断不存在的文件,....我也相信以这种方式要求库通常不是一个好主意,这种方法存在安全性和可靠性问题。但也许你有一个有效的用例。
答案 2 :(得分:0)
您可以在Gemfiles
内添加远程宝石,然后在您运行bundle install
时下载