Ruby:如何从当前工作目录“需要”一个文件?

时间:2011-12-14 20:10:28

标签: ruby require

如何从当前文件夹中获取文件?

我有一个名为sql_parser.rb的文件,其中包含一个类。我想将它包含在同一个文件夹中的另一个文件中,所以我使用了:

require 'sql_parser'

当我从该文件夹运行时失败:

LoadError: no such file to load -- sql_parser

我尝试在存在此文件的文件夹中使用IRB并从那里开始使用它,但遇到了同样的问题。

5 个答案:

答案 0 :(得分:30)

在ruby 1.9.x中,您可以使用方法require_relative。请参阅http://www.ruby-doc.org/core-1.9.3/Kernel.html#method-i-require_relative

答案 1 :(得分:8)

使用

$:.unshift File.join(File.dirname(__FILE__))

确保您根据脚本所在的位置获取路径,而不是从执行程序的位置获取路径。否则,您将丢弃从加载路径中删除"."所带来的安全优势。

(是的,问题的标题是关于要求运行脚本的目录中的文件,但问题正文提到所需文件与相关脚本位于同一文件夹中)

答案 2 :(得分:4)

...也

要求“./myRubyFile”#notice我们从myRubyFile.rb中排除.rb

答案 3 :(得分:3)

在1.9上,语法更改为require_relative,正如此问题的其他答案所说的那样。

如果您正在使用Ruby 1.8编写,我建议您以前瞻性的方式编写代码,并使用require_relative gem,这样您就可以在Ruby 1.8中使用此关键字,并在处理时减少一个过渡性的事情。转到1.9

答案 4 :(得分:2)

$LOAD_PATH << Dir.pwd
require 'sql_parser'

正如@AndrewGrimm所说,出于安全原因,你应该使用它:

$LOAD_PATH << File.join(File.dirname(__FILE__))
require 'sql_parser'

您的目录必须位于当前加载路径中。加载路径存储在名为$LOAD_PATH的全局数组中。如果将当前目录附加到该目录,则可以使用require加载目录中的任何文件。

使用Dir.pwd代替pwd。按照Tin Man的建议选择

此外,我更喜欢这个而不是require_relative,除非你有一个非常小的项目,否则事情就会变得难看。