ruby 和 irb 都不能在当前目录中加载 .rb 文件
Posted
技术标签:
【中文标题】ruby 和 irb 都不能在当前目录中加载 .rb 文件【英文标题】:Neither ruby and nor irb can load .rb file in current directory 【发布时间】:2011-04-23 07:51:35 【问题描述】:我在 Ruby 中导入文件时遇到了一个非常菜鸟的问题。我正在 Windows XP 中制作一个 Ruby 应用程序。该应用程序的所有类文件都在"C:/Documents/Prgm/Surveyor_Ruby/lib"
中。但是当我require
一个文件在另一个文件中时,ruby和irb都找不到需要的文件。
当前目录的内容:
C:\Documents\Prgm\Surveyor_Ruby\lib>dir
Volume in drive C has no label.
Volume Serial Number is AAAA-BBBB
Directory of C:\Documents\Prgm\Surveyor_Ruby\lib
10/09/2010 06:32 PM <DIR> .
10/09/2010 06:32 PM <DIR> ..
10/08/2010 03:22 PM 5,462 main (commented).rb
10/08/2010 03:41 PM 92 question.rb
10/08/2010 09:06 PM 2,809 survey.rb
10/09/2010 06:25 PM 661 surveyor.rb
10/08/2010 01:39 PM 1,546 test.rb
5 File(s) 10,570 bytes
2 Dir(s) 40,255,045,632 bytes free
确认irb在正确的目录:
C:\Documents\Prgm\Surveyor_Ruby\lib>irb
irb(main):001:0> Dir.pwd
=> "C:/Documents/Prgm/Surveyor_Ruby/lib"
...然而 irb 无法加载survey.rb:
irb(main):002:0> require 'survey'
LoadError: no such file to load -- survey
from <internal:lib/rubygems/custom_require>:29:in `require'
from <internal:lib/rubygems/custom_require>:29:in `require'
from (irb):2
from C:/Ruby192/bin/irb:12:in `<main>'
【问题讨论】:
除了***解决方案之外,require './survey'
也可以使用。基本上你的当前目录在默认情况下实际上并不在搜索路径中,所以你必须明确地将 ruby 指向它,或者将它包含在搜索路径中。
【参考方案1】:
我相信之前的两个帖子都是正确的,只是用于不同的用途。在 IRB 中使用带有require
的绝对路径,对于文件,您也可以使用带有绝对路径的require
,或者使用require_relative
。
【讨论】:
【参考方案2】:注意到相同的行为,但我的 linux 根让我尝试:.\file.rb
并将其加载到 irb 中。尝试显式声明当前目录。
【讨论】:
这仅在当前目录恰好是两个文件所在的目录时才有效。【参考方案3】:这很脏,但你总是可以在第一行做:
$: << '.'
然后你就去 pwd'ed 要求。 这对于使用 IRB 进行交互式/创造性测试非常有用
【讨论】:
谢谢。我不知道为什么 require 对我不起作用。【参考方案4】:这些都不适合我,但这确实有效:
irb -I .
>require 'file'
=> true
【讨论】:
检查我的解决方案,当您没有使用-I .
启动irb 将pwd
设置为$LOAD_PATH
目录时,这尤其好。
irb
的奇妙功能!
@DanKozlowski 更像是 Ruby 的糟糕设计!在 Python 中,默认将当前目录添加到 PATH 中。【参考方案5】:
如果您尝试使用 rvmsudo 执行此操作,我发现这对我有用:
rvmsudo irb -I '/Absolute/path/to/your/project'
【讨论】:
【参考方案6】:这个命令怎么样?写起来有点麻烦,但很干净,它应该总是有效的:
➜ $ irb > 需要“#Dir.pwd/file_to_load.rb” => 真【讨论】:
【参考方案7】:require './hede'
或
require_relative 'hede'
这在 Linux 上的 Ruby (1.9.3) 和 JRuby (1.7.x) 中都适用。我没有在windows上测试过。
【讨论】:
以上是关于ruby 和 irb 都不能在当前目录中加载 .rb 文件的主要内容,如果未能解决你的问题,请参考以下文章