2011-10-15 65 views
2

我使用Bundler爲我生成一個Gem骨架。在lib/foo.rb,我有以下幾點:在RubyGem中需要文件的正確方法?

require 'foo/client' 
require 'foo/other' 

這兩行應該需要分別lib/foo/client.rblib/foo/other.rb。它的構建沒有問題,但是當我用irb進行測試時,出現文件未找到錯誤。

ruby-1.9.2-head :003 > require 'foo' 
LoadError: no such file to load -- foo/client 
    from /home/ethan/.rvm/rubies/ruby-1.9.2-head/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 
    from /home/ethan/.rvm/rubies/ruby-1.9.2-head/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 
    from /home/ethan/.rvm/gems/ruby-1.9.2-head/gems/foo-0.1.0/lib/foo.rb:3:in `<top (required)>' 
    from /home/ethan/.rvm/rubies/ruby-1.9.2-head/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 
    from /home/ethan/.rvm/rubies/ruby-1.9.2-head/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 
    from (irb):3 
    from /home/ethan/.rvm/rubies/ruby-1.9.2-head/bin/irb:16:in `<main>' 
ruby-1.9.2-head :004 > 

在同一個Gem中需要文件的正確方法是什麼?必須有一些簡單的東西我正在監督...

回答

2

當前目錄不在Ruby 1.9的加載路徑中。嘗試下列操作之一:

require './client' 

require_relative 'client' 
+0

使用require_relative,我仍然收到錯誤。 https://gist.github.com/1288893 –

5

如果您的寶石被稱爲 '富',那麼所有你需要做的是使用bundle exec

bundle exec your-script.rb 

沒有捆綁高管,加載路徑設置不正確。

使用irb,您使用捆綁命令bundle console。一旦創業板安裝在系統上

[email protected]:~/oss/pp-adaptive$ irb 
irb(main):001:0> AdaptivePayments 
NameError: uninitialized constant Object::AdaptivePayments 
    from (irb):1 
    from /home/chris/.rbenv/versions/1.9.2-p290/bin/irb:12:in `<main>' 
irb(main):002:0> 

[email protected]:~/oss/pp-adaptive$ bundle console 
irb(main):001:0> AdaptivePayments 
=> AdaptivePayments 
irb(main):002:0> 

注意,你可以使用它沒有捆綁。

0

如果你在IRB本身可能需要

require "rubygems" 
require "foo" 

如果庫是一個寶石。或者,你可以要求寶石的完整路徑,但我不會建議它,因爲rubygems確實需要魔法,所以reload!在irb中工作(至少它對軌道控制檯有效)。