【问题标题】:Neither ruby and nor irb can load .rb file in current directoryruby 和 irb 都不能在当前目录中加载 .rb 文件
【发布时间】: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​​ 指向它,或者将它包含在搜索路径中。

标签: ruby import require irb ruby-1.9.2


【解决方案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上测试过。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-05
          • 1970-01-01
          • 2015-07-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多