如何从另一个目录中请求ruby文件

我想要一个我在另一个文件中创建的rake文件。 这两个文件位于两个不同的目录中。 我要求在我的第一个文件的顶部,在require之后的引号内有第二个文件的名称。 它告诉我它无法加载这样的文件。 这是否意味着因为它在不同的目录中找不到它? 我试着坚持第二个文件的完整路径,但它仍然无法加载文件。 有谁知道如何将第二个文件加载到第一个文件中?

提前致谢

require将仅在称为“加载路径”的一组位置中搜索文件。 您可以在脚本或irb会话中使用全局变量$LOAD_PATH来查看加载路径。 如果它不在加载路径中,它将找不到它。

Ruby 1.9引入了require_relative ,它使用当前文件的位置作为起点进行搜索。

 # Will search $LOAD_PATH for file. require 'test/unit' # Notice the '/' which tells it to look in the # 'test' folder for a file named 'unit.rb' # Will look in current folder of file require_relative 'my_folder/my_file' # Will search in 'my_folder' for the file 'my_file.rb' 

请注意, require_relative在irb中不起作用。

另请注意,如果您确实想使用require ,则可以通过向$LOAD_PATH变量添加位置来启动脚本。

 $LOAD_PATH << File.join('users', 'yourusername', 'your_folder') # or $LOAD_PATH << File.dirname(__FILE__) # The second one enables you to move the file around on your # system and still operate correctly require 'my_file' 

以下是Ruby-Doc的一些其他文档:

  • $LOAD_PATH
  • require
  • require_relative
  • File.dirname
  • __FILE__

来自文档:它建议使用require relative。 文件

require_relative通过允许您加载与包含require_relative语句的文件相关的文件来补充内置方法require。

使用require加载文件时,通常会访问已在系统中正确安装并可访问的function。 require不能为项目代码中的文件加载提供良好的解决方案。 这在开发阶段,访问测试数据,甚至访问项目中“锁定”的文件非常有用,不适合外部使用。

例如,如果您在“test”目录中有unit testing类,并且在测试“test / data”目录下有它们的数据,那么您可以在测试用例中使用这样的行:

 require_relative "data/customer_data_1" 

也可以这样做:

 require './something.rb' 

从当前目录包括。

例如,您有文件:

chess.rb和spec / test.rb

并且您想要在spec / test.rb中要求该文件。 使用:

 require_relative '../test.rb' 

有两个点。 使用一个点’./’,您将收到错误“无法加载此类文件”