Nice programing

Ruby의로드 경로 이해

nicepro 2021. 1. 6. 20:50
반응형

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

반응형