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

时间:2013-05-31 11:28:26

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2 require

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

提前致谢

4 个答案:

答案 0 :(得分:52)

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的其他文档:

答案 1 :(得分:9)

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

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

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

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

require_relative "data/customer_data_1"

答案 2 :(得分:8)

也可以这样做:

require './something.rb'

从当前目录中包含。

答案 3 :(得分:0)

例如,您有以下文件:

chess.rb和spec / test.rb

您想要在spec / test.rb中提供文件。使用:

require_relative '../test.rb'

带有两个点。带有一个点“ ./”的错误消息是“无法加载此类文件”

相关问题