我使用Bundler为我生成宝石骨架。在lib/foo.rb
内,我有以下内容:
require 'foo/client'
require 'foo/other'
这两行应该分别需要lib/foo/client.rb
和lib/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中需要文件的正确方法是什么?必须有一些我正在监督的简单......
答案 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控制台)。