2

プロジェクトのrubyスクリプトを含む/scriptsフォルダーがあります。

/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:in `require':そのようなファイルをロードできません--lib / myapp /../../ models(LoadError)

私は試した:

require 'app/models'

それもうまくいきませんでした。

何が間違っているのですか?また、config.ymlファイルが正しく読み込まれるのはなぜですか?

4

1 に答える 1

7

File.open は明示的なパスを使用しますが、require は PATH で検索を試みます。Ruby >= 1.9.2 は現在のディレクトリを検索パスに追加しないため、明示的に指定する必要があります

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

またはrequire_relativeを使用

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

または、現在のディレクトリを検索パスに追加することもできます (推奨されません。これは、セキュリティ上の理由から ruby​​ から削除されました)。

$: << '.'
于 2012-09-23T20:53:50.320 に答える