2011-02-11 4 views
35

내 현재 작업 디렉토리가 내 Ruby 경로에없는 이유가 있습니까?Ruby 경로에 현재 디렉토리가없는 이유는 무엇입니까?

고려 :

~:499$ irb 
ruby-1.9.2-p136 :002 > puts $: 
/Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1 
/Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1/x86_64-darwin10.6.0 
/Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby 
/Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby/1.9.1 
/Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby/1.9.1/x86_64-darwin10.6.0 
/Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby 
/Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1 
/Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/x86_64-darwin10.6.0 
=> nil 

나는 (내가 루비 nuby 해요 있지만)이 생각했던대로 작동하지 않는 필요로하기 때문에이 정말 날 귀찮게한다 :

require 'some_file_that_I_know_darn_well_is_in_pwd.rb' 

을 나는 '.'를 추가하는 경우 결국, 필자는 예상대로 작동해야한다.

무엇이 누락 되었습니까?


UPDATE :

의 Arg! 이제 새로운 문제가 생겼어. 고려 :

ruby-1.9.2-p136 :010 > `ls` 
=> "start.rb\n" 
ruby-1.9.2-p136 :011 > require_relative 'start' 
LoadError: cannot infer basepath 
    from (irb):11:in `require_relative' 
    from (irb):11 
    from /Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/bin/irb:16:in `<main>' 

이제 어떻게 되었습니까?

답변

74

Ruby 1.9.2에서 제공되는 파워는 an explicit change이되어 더 이상 루비 경로에 있지 않게됩니다. require_relative에 대해 알기 전까지는 그것이 Apocalypse와 끔찍한 일이라고 생각했습니다. 내 응용 프로그램은 다음과 같이하는 경향이 :

require 'some_gem' 
require 'another_gem' 
require_relative 'lib/init' 

을 그리고 lib/init.rb을 가질 수 있습니다

require_relative 'lib1' # this is lib/lib1.rb 
require_relative 'lib2' # this is lib/lib2.rb 

그것은 꿀벌의 무릎을, 그리고 내가 다른에서 같은 파일을 필요로해야하는 데 사용되는 모든 종류의 문제를 해결 작업 디렉토리.

편집 : : 불행히도 (이유는 모르겠으므로 조사하지 않았습니다) require_relative은 irb에서 특별히 작동하지 않습니다. 당신이 할 수있는이 들어 :

  1. 당신이 처음에 설명 무엇 : $: << '.' 또는 $:.unshift '.', 또는
  2. 중 하나가
  3. 대신 load 'myfile.rb' 또는 require './myfile'를 사용할 수 있습니다 필요는 없습니다

    irb(main):001:0> Dir['*.rb'] 
    => ["a.rb", "bar.rb", "foo.rb", "prime.rb", "tmp.rb"] 
    
    irb(main):002:0> require 'a' 
    LoadError: no such file to load -- a 
        from <internal:lib/rubygems/custom_require>:29:in `require' 
        from <internal:lib/rubygems/custom_require>:29:in `require' 
        from (irb):2 
        from /usr/local/bin/irb:12:in `<main>' 
    
    irb(main):003:0> require_relative 'a' 
    LoadError: cannot infer basepath 
        from (irb):3:in `require_relative' 
        from (irb):3 
        from /usr/local/bin/irb:12:in `<main>' 
    
    irb(main):004:0> load 'a.rb' 
    a 
    => true 
    
    irb(main):005:0> require './a' 
    a 
    => true 
    
+0

당신은 나를 더 가까이 가져 왔습니다. 업데이트 된 질문을 살펴 보도록주의하십시오. – JnBrymn

+0

@JohnBerryman 일치하도록 수정되었습니다. – Phrogz

+0

음 ... 그게 문제를 해결했습니다. 내가 기대했던 것만 큼 멋진 솔루션이 아닙니다.이것이 루비 사람들의 일부에 대한 감독인지 궁금합니다. – JnBrymn

1

사용자 지정 * .rb 코드를 찾을 수있는 모든 디렉터리 경로와 함께 환경 변수 "RUBYLIB"가 설정되어 있는지 확인하십시오. 그것은 나에게도 견과를 몰았다.

+1

합니다. @Phrogz의 답변을 참조하십시오. –

+0

나는 그걸 몰랐다. 대단한 답변입니다 (단, 내일까지 투표 할 수는 없으며 투표에서 제외됩니다). 그 중 하나를 시도하기 위해 일부 코드를 변경하려고합니다. 내 방식대로 작동합니다. 나는 지금 그것에 의존하는 코드를 가지고 있지만, 나는 그의 방식이 좋고 그것을 시도 할 것이다. – jmq

3

require_relative를 사용하면 필요한 것을 가정하여 사용할 수 있습니다.

관련 문제