2011-10-15 23 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中工作(至少它对轨道控制台有效)。