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 文件的主要内容,如果未能解决你的问题,请参考以下文章

ruby 在目录中加载多个文件并要求它们

Ruby 在与源相同的目录中加载配置(yaml)文件

在 Ruby 中加载“file.rb”与需要“模块”

使用 WebVIew2 (Windows) 在当前目录中加载本地 HTML 文件

Appium:Ruby:在gem中加载错误

无法在 Rails 控制台中加载 Ruby EventMachine - 没有要加载的文件