web-dev-qa-db-ja.com

別のディレクトリからRubyファイルを要求する方法

私が持っている別のファイル内に作成したレーキファイルを要求しようとしています。これらの2つのファイルは、2つの異なるディレクトリ内にあります。最初のファイルの先頭にrequireがあり、requireの後の引用符内に2番目のファイルの名前があります。そのようなファイルを読み込めないと言っています。別のディレクトリで見つからないためですか? 2番目のファイルへのフルパスを使用しようとしましたが、まだファイルをロードできません。 2番目のファイルを最初のファイルにロードする方法を知っている人はいますか?

前もって感謝します

28

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の追加ドキュメントを示します。

53

ドキュメントから:require relativeを使用することを提案します。 Docs

require_relativeは、require_relativeステートメントを含むファイルに関連するファイルをロードできるようにすることで、組み込みメソッドに必要な機能を補完します。

requireを使用してファイルをロードする場合、通常、システムに適切にインストールされ、アクセス可能にされた機能にアクセスしています。 requireは、プロジェクトのコード内でファイルをロードするための適切なソリューションを提供しません。これは、開発段階でテストデータにアクセスしたり、プロジェクト内で「ロック」されているファイルにアクセスしたり、外部での使用を目的としない場合にも役立ちます。

たとえば、「test」ディレクトリに単体テストクラスがあり、テストの「test/data」ディレクトリの下にそれらのデータがある場合、テストケースで次のような行を使用できます。

require_relative "data/customer_data_1"
9
Bijendra

それも可能です:

require './something.rb'

含める現在のディレクトリから。

8
BladeMight

たとえば、次のファイルがあります。

chess.rbおよびspec/test.rb

そして、spec/test.rbにあるファイルを要求します。つかいます:

require_relative '../test.rb'

2つのドットで。 1つのドット「./」を使用すると、「そのようなファイルをロードできません」というエラーが発生します

0
Alexandr