为什么YAML :: Load工作,但使用require的相对路径不起作用

时间:2012-09-23 19:03:51

标签: ruby

我有一个/ scripts文件夹,其中包含我项目的一些ruby脚本。

/scripts
/scripts/app/models.rb
/scripts/config/config.yml
/scripts/lib
/scripts/lib/myapp/test.rb

在我的test.rb中,我有以下代码正确加载config.yml文件:

env = ENV['ENV'] || 'development'
config = YAML::load(File.open('config/config.yml'))[env]

现在位于test.rb文件的顶部,我正在尝试加载我使用ActiveRecord的models.rb文件,但是我收到错误:

require File.join(File.dirname(__FILE__), "../../", 'models')

错误:

1.9.1 / ruby​​gems / custom_require.rb:36:在`require':无法加载此类文件 - lib / myapp /../../ models(LoadError)

我试过了:

require 'app/models'

也没有用。

我做错了什么,为什么config.yml文件加载正确?

1 个答案:

答案 0 :(得分:7)

File.open使用显式路径,但需要尝试在PATH中搜索。 Ruby> = 1.9.2不会将当前目录添加到搜索路径 - 因此您需要明确指定它

require File.join(File.dirname(__FILE__), "./../../app", 'models')

或使用require_relative

require_relative '../../app/models'

或者,您可以将当前目录添加到搜索路径(不推荐,出于安全考虑,已将其从ruby中删除)

$: << '.'