내가 원하는 경우 가장 좋은 방법이다 require
루비에서 상대 파일 과 나는 모두에 1.8.x 및> = 1.9.2에서 일하고 싶어?
몇 가지 옵션이 있습니다.
- 그냥
$LOAD_PATH << '.'
하고 모든 것을 잊어 버려 - 하다
$LOAD_PATH << File.dirname(__FILE__)
require './path/to/file'
RUBY_VERSION
<1.9.2 인지 확인한 다음로 정의require_relative
하고 나중에 필요한 곳에require
사용하십시오.require_relative
require_relative
이미 존재 하는지 확인하고 , 존재하는 경우 이전과 같이 진행하십시오.- 루비 1.9에서는 완전히 작동하지 않는 것과 같은 이상한 구조를 사용하십시오 .
require File.join(File.dirname(__FILE__), 'path/to/file')
$ cat caller.rb require File.join(File.dirname(__FILE__), 'path/to/file') $ cat path/to/file.rb puts 'Some testing' $ ruby caller Some testing $ pwd /tmp $ ruby /tmp/caller Some testing $ ruby tmp/caller tmp/caller.rb:1:in 'require': no such file to load -- tmp/path/to/file (LoadError) from tmp/caller.rb:1:in '<main>'
- 더 이상한 구성 : 작동하는 것처럼 보이지만 이상하고보기에는 좋지 않습니다.
require File.join(File.expand_path(File.dirname(__FILE__)), 'path/to/file')
- 백 포트 젬 사용 -종류가 무겁고 루비 젬 인프라가 필요하며 다른 해결 방법이 많이 포함되어 있지만
require
상대 파일로 작업 하고 싶습니다 .
StackOverflow 에는 더 많은 예제를 제공 하는 밀접한 관련 질문이 있지만 명확한 답변을 제공하지는 않습니다. 이것이 모범 사례입니다.
Ruby <1.9.2 및> = 1.9.2 모두에서 응용 프로그램을 실행할 수있는 괜찮은 수준의 범용 솔루션이 있습니까?
최신 정보
설명 : "X를 할 수있다"와 같은 답을 원치 않습니다. 사실, 문제의 대부분의 선택을 이미 언급했습니다. 내가 원하는 근거 , 즉 이유 는 그것이 다른 사람의 사이에서 선택해야하는 이유 장단점이 있고 어떤 가장 좋은 방법입니다.
a.rb
파일의 내용을 읽고 구문 분석 b.rb
하도록하려면 (일반적으로와 같은 디렉토리 a.rb
) 작성하면 require 'b'
됩니다. 현재 디렉토리가 포함 된 기본 검색 경로로 괜찮을 것입니다. 보다 현대적인 Ruby 1.9에서는 표준 라이브러리 경로에서만 검색하는 require_relative 'b'
것처럼이 경우 에 작성해야 require 'b'
합니다. 제대로 설치되지 않는 간단한 스크립트 (예 : 스크립트 자체 설치 )에 대해서는 일종의 앞뒤 호환성이 있습니다 .
backports
단지에 대한 require_relative
내 대답을 참조 ...
require
와require_relative
?