web-dev-qa-db-ja.com

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 

Requireが思ったように機能しないので、これは本当に私を悩ませています(私はRuby nuby)ですが)。

require 'some_file_that_I_know_darn_well_is_in_pwd.rb'

最後に'.'を追加すると、requireは期待どおりに機能します。

何が欠けていますか?


更新:

アーグ!今、私は新たな問題を抱えています。検討してください:

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>'

どうしたの?

35
JnBrymn

Ruby 1.9.2導入される力 明示的な変更 で、作業ディレクトリがRubyパスに存在しないように。require_relativeについて知るまでは、それは黙示録で恐ろしいことだと思いました。アプリは次のようになる傾向があります。

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. 代わりに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
    
75
Phrogz

Require_relativeは、必要なことを前提として使用できます。

3

環境変数 "RUBYLIB"が、カスタム* .rbコードを見つけるすべてのディレクトリパスで設定されていることを確認してください。それも私にナッツを運転しました。

1
jmq