web-dev-qa-db-ja.com

「必須」がデフォルトで検索するパスは何ですか?

Rubyでは、次のことを行うと言われました。

require "some_file"

Rubyは特定の場所でファイルを探します。

some_file.rbを検索することは知っていますが、デフォルトではどこで検索しますか?

54
Mark Provan

プラットフォームに依存し、Rubyがどのようにコンパイルされたかによって、これに対する "the"の答えはありません。

Ruby -e 'puts $:'

ただし、一般的には、標準、サイト、およびベンダーRubyライブラリパスがあり、それぞれにArch、バージョン、および一般ディレクトリが含まれています。

69
Daniel Pittman

Rubyは、$LOAD_PATH配列で指定されたすべてのパスを検索します。

次のように検索するディレクトリを追加することもできます。

$LOAD_PATH.unshift File.expand_path('../path/from/this/file/to/another/directory', __FILE__)
24
Brian Hempel

rUBYLIB環境変数を設定することにより、追加のパスを指定できます

8
mighq

$ LOAD_PATHグローバル変数($:とも呼ばれます)には、検索されるディレクトリのリストが含まれています。

参照: http://www.Ruby-doc.org/core-1.9.3/Kernel.html#method-i-require

6
Perry

require(string)=> trueまたはfalse

Rubyはstringという名前のライブラリをロードしようとし、成功するとtrueを返します。ファイル名が絶対パスに解決されない場合、$:にリストされたディレクトリで検索されます。ファイルの拡張子が「.rb」の場合、ソースファイルとしてロードされます。拡張子が「.so」、「。o」、「。dll」、またはデフォルトの共有ライブラリ拡張子が現在のプラットフォームにある場合、Rubyは共有ライブラリを= Ruby extension。それ以外の場合、Rubyは、「。rb」、「。so」などを名前に追加しようとします。読み込まれた機能の名前が追加されます。 $:の配列に。

1
ericraio

コマンドラインでRubyを呼び出す場合、-I引数を使用して追加の検索パスを提供できます。の出力を比較する

$ Ruby -e 'puts $:'

の出力で

$ Ruby -I /tmp -e 'puts $:'

2番目のものが/tmpをオプションとしてリストする方法に注意してください。複数の-Iを使用して、複数のパスを追加できます。

Shebangでも使用できます。

#!/usr/bin/Ruby -I /tmp -I /usr/local/lib/Ruby
0
Mecki