2011-11-30 4 views
0

Ruby의 require 문을 사용하여 로컬 파일 시스템이 아닌 github 같은 곳에서 파일을 다운로드 할 수 있습니까?Ruby에 github의 코드 스 니펫이 필요합니다.

업데이트 : 죄송합니다. 질문을 명확하게 작성해야했습니다. Ruby 모듈이 포함 된 파일을 다운로드하고 스크립트 내에서 이미지 나 다른 임의의 파일을 다운로드하는 대신 내 스크립트로 가져 오려고합니다. 당신은 기본적으로 bundle install

답변

4

를 실행할 때 Gemfiles 내에서 원격 보석을 포함 할 수있다이

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

puts 'hi' 
+0

언급 한 바와 같이 스 니펫은 bundler가 필요로하는 gemspec이 포함 된 repo에 있어야합니다. 예 : gem 'snippets', : git => 'http://github.com/myrepo/snippets.git' – BF4

0

같은 즉

뭔가 후 다운로드 것, 이것은 불가능하다. 또한 보안상의 이유로 좋은 생각이 아닙니다.

몇 가지 대안이 있습니다. 포함하려는 파일이 Gem 및 Git 저장소 인 경우 Bundler을 사용하여 프로젝트에서 종속성을 다운로드하고 패키지화 할 수 있습니다. 그러면 require 파일을 소스 코드에 직접 입력 할 수 있습니다.

이것은 외부 종속성을 포함하는 가장 안전하고 안전한 방법입니다.

소스를 신뢰하고 자신이하는 일을 정말로 알고 있다면 Net :: HTTP (또는 다른 HTTP 라이브러리)를 사용하여 파일을 다운로드하고 직접 루비 코드에서 본문을 평가할 수 있습니다. 사용자 정의 require_remote 기능으로 모든 것을 패키지화 할 수 있습니다.

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 

주의 평가 후면 수 있습니다,이 코드는 파일을 존재하지 않는 네트워크 중단을 검사 오류가 없습니다 .... 또한 라이브러리를 이런 방식으로 요구하는 것이 일반적으로 좋지 않다고 생각합니다.이 접근 방식에는 보안 및 안정성 문제가 있습니다. 하지만 어쩌면 당신은 이것을위한 유스 케이스가 될 수 있습니다.

관련 문제