2013-10-02 39 views
6

我是绝对的Ruby初学者。我创建了一个小红宝石文件,运行命令ruby "methods.rb"时运行良好。这意味着我在正确的目录中。需要无法找到红宝石文件

但是当我启动IRB和运行命令require "methods.rb",我得到如下回应:

LoadError: cannot load such file -- methods.rb 
    from /usr/local/rvm/rubies/ruby-1.9.3-p392/lib/ruby/site_ruby/1.9.1/rubygems/core_ext/kernel_require.rb:53:in `require' 
    from /usr/local/rvm/rubies/ruby-1.9.3-p392/lib/ruby/site_ruby/1.9.1/rubygems/core_ext/kernel_require.rb:53:in `require' 
    from (irb):1 
    from /usr/local/rvm/rubies/ruby-1.9.3-p392/bin/irb:16:in `<main>' 

回答

10

Ruby没有默认当前路径添加到负载路径。

从irb开始,您可以尝试使用require "./methods.rb"

1

我在目录/home/kirti/Ruby有一个名为so.rb的ruby文件。所以首先从IRB我会改变我目前的工作目录使用Dir#chdir方法。然后我会打电话给#load#require方法。我的so.rb文件只包含p hello行。

我会走这条路:

>> Dir.pwd 
=> "/home/kirti" 
>> Dir.chdir("/home/kirti/Ruby") 
=> 0 
>> Dir.pwd 
=> "/home/kirti/Ruby" 
>> load 'so.rb' 
"hello" 
=> true 
>> require './so.rb' 
"hello" 
=> true 
1

添加您从负载路径使用执行Ruby脚本的目录:

$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '')) 

,或者如果你已经把你的依赖关系“当前目录的子目录:

$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), 'subdir')) 
1

如果你打算在IRB中加载你的内容可以这样做:

irb -I. 

注意'点'那里,表示当前目录。

如果你正在探索,使在该文件中的变化,当你在IRB,使用load而不是`requireload让您加载更改,require将只允许一次所需的文件。这意味着您不需要退出IRB以查看您的更改如何受到影响。

要了解IRB有哪些选项,您可以做irb --help,如果您正在学习该工具,那么该做法很好。