現在の作業ディレクトリが私の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>'
どうしたの?
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では特に機能しません。このためにできること:
$: << '.'
または$:.unshift '.'
、または代わりに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
Require_relativeは、必要なことを前提として使用できます。
環境変数 "RUBYLIB"が、カスタム* .rbコードを見つけるすべてのディレクトリパスで設定されていることを確認してください。それも私にナッツを運転しました。