Ruby의 require 문을 사용하여 로컬 파일 시스템이 아닌 github 같은 곳에서 파일을 다운로드 할 수 있습니까?Ruby에 github의 코드 스 니펫이 필요합니다.
업데이트 : 죄송합니다. 질문을 명확하게 작성해야했습니다. Ruby 모듈이 포함 된 파일을 다운로드하고 스크립트 내에서 이미지 나 다른 임의의 파일을 다운로드하는 대신 내 스크립트로 가져 오려고합니다. 당신은 기본적으로 bundle install
Ruby의 require 문을 사용하여 로컬 파일 시스템이 아닌 github 같은 곳에서 파일을 다운로드 할 수 있습니까?Ruby에 github의 코드 스 니펫이 필요합니다.
업데이트 : 죄송합니다. 질문을 명확하게 작성해야했습니다. Ruby 모듈이 포함 된 파일을 다운로드하고 스크립트 내에서 이미지 나 다른 임의의 파일을 다운로드하는 대신 내 스크립트로 가져 오려고합니다. 당신은 기본적으로 bundle install
를 실행할 때 Gemfiles
내에서 원격 보석을 포함 할 수있다이
require 'http:\\github.com\myrepo\snippet.rb'
puts 'hi'
같은 즉
뭔가 후 다운로드 것, 이것은 불가능하다. 또한 보안상의 이유로 좋은 생각이 아닙니다.
몇 가지 대안이 있습니다. 포함하려는 파일이 Gem 및 Git 저장소 인 경우 Bundler을 사용하여 프로젝트에서 종속성을 다운로드하고 패키지화 할 수 있습니다. 그러면 require
파일을 소스 코드에 직접 입력 할 수 있습니다.
이것은 외부 종속성을 포함하는 가장 안전하고 안전한 방법입니다.
소스를 신뢰하고 자신이하는 일을 정말로 알고 있다면 Net :: HTTP (또는 다른 HTTP 라이브러리)를 사용하여 파일을 다운로드하고 직접 루비 코드에서 본문을 평가할 수 있습니다. 사용자 정의 require_remote
기능으로 모든 것을 패키지화 할 수 있습니다.
다운로드하고
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
주의 평가 후면 수 있습니다,이 코드는 파일을 존재하지 않는 네트워크 중단을 검사 오류가 없습니다 .... 또한 라이브러리를 이런 방식으로 요구하는 것이 일반적으로 좋지 않다고 생각합니다.이 접근 방식에는 보안 및 안정성 문제가 있습니다. 하지만 어쩌면 당신은 이것을위한 유스 케이스가 될 수 있습니다.
언급 한 바와 같이 스 니펫은 bundler가 필요로하는 gemspec이 포함 된 repo에 있어야합니다. 예 : gem 'snippets', : git => 'http://github.com/myrepo/snippets.git' – BF4