在RubyGem中需要文件的正确方法?

时间:2011-10-15 01:49:19

标签: ruby rubygems gem

我使用Bundler为我生成宝石骨架。在lib/foo.rb内,我有以下内容:

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中需要文件的正确方法是什么?必须有一些我正在监督的简单......

3 个答案:

答案 0 :(得分:5)

如果您的宝石被称为'foo',那么您需要做的就是使用bundle exec

bundle exec your-script.rb

没有bundle exec,加载路径设置不正确。

使用irb,您可以使用捆绑命令bundle console

chris@chris:~/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> 

chris@chris:~/oss/pp-adaptive$ bundle console
irb(main):001:0> AdaptivePayments
=> AdaptivePayments
irb(main):002:0> 

请注意,一旦在您的系统上安装了gem,您就可以在没有捆绑器的情况下使用它。

答案 1 :(得分:2)

当前目录不在Ruby 1.9的加载路径中。尝试其中之一:

require './client'

require_relative 'client'

答案 2 :(得分:0)

如果你在IRB本身,你可能需要

require "rubygems"
require "foo"

如果图书馆是宝石。或者你可以要求gem的完整路径,但我不建议它,因为rubygems确实需要魔法,所以reload!在irb中工作(至少它适用于rails控制台)。