반응형
Ruby의로드 경로 이해
내 프로젝트가 필요한 파일을로드 할 수없는 이유에 대해 약간 혼란 스럽습니다. 정말 간단한 프로젝트 트리입니다.
processor/
bin/
lib/
processor.rb
processor/
mapper.rb
reducer.rb
내 processor.rb
파일은 다음과 같습니다.
require 'processor/mapper'
require 'processor/reducer'
class Processor
end
그리고 테스트를 위해 파일 매퍼는 다음과 같습니다.
class Mapper
def run
puts "running map"
end
end
그러나 실행 ruby lib/processor.rb
하면 다음과 같은 결과가 발생합니다.
<internal:lib/rubygems/custom_require>:29:in `require': no such file to load -- processor/mapper (LoadError)
from <internal:lib/rubygems/custom_require>:29:in `require'
from lib/processor.rb:3:in `<class:Processor>'
from lib/processor.rb:2:in `<main>'
Ruby $LOAD_PATH
에는 lib
기본적으로 디렉토리가 포함되지 않습니다 (실행중인 파일이있는 위치 임에도 불구하고).
ruby
통역사에게 다음을 포함하도록 지시 할 수 있습니다 .
ruby -Ilib lib/processor.rb
또는 lib
로드 경로에 폴더를 추가 할 수 있습니다 .
$LOAD_PATH.unshift(File.dirname(__FILE__))
require 'processor/mapper'
...
Ruby 1.9에는 더 이상 "."이 포함되지 않습니다. 로드 경로에서. 수행 require "#{File.dirname(__FILE__)}/processor/mapper"
또는 사용 require_relative
.
검사 $LOAD_PATH
(또는 $:
)를 통해 항상 현재로드 경로를 확인할 수 있습니다.
(편집 됨 : $ : LOAD_PATH가 아닌 $ LOAD_PATH)
require_relative
이 경우 Ruby를 사용하십시오 .
require_relative "processor/mapper"
참조 URL : https://stackoverflow.com/questions/6671318/understanding-rubys-load-paths
반응형
'Nice programing' 카테고리의 다른 글
a [a [0]] = 1은 정의되지 않은 동작을 생성합니까? (0) | 2021.01.07 |
---|---|
데이터 컨텍스트를 언제 폐기해야합니까? (0) | 2021.01.07 |
Windows에서 크론 작업 설정 (0) | 2021.01.06 |
Firefox는 다시로드 할 때 양식 데이터를 유지합니다. (0) | 2021.01.06 |
Porter 및 Lancaster Stemming 알고리즘의 주요 차이점과 이점은 무엇입니까? (0) | 2021.01.06 |