require File.expand_path(..., __FILE__)
は、プロジェクト内の他のファイルを要求する最良の方法ですか?
Ruby 1.9.2 + require_relative
の方がおそらく正しい方法です。
require
が変更され、'.'
セキュリティ上の理由からディレクトリ。 require_relative
は、呼び出しスクリプトのパスに関連するモジュールのローカルファイルソリューションを提供するために追加されました。
ここでStackOverflow 、特に「 What is require_relative in Ruby? 」を検索して、インターネットや使用法のトリックや why-for messages それがどうやって起こったかを説明します。
Ruby 2.xでは Kernel#__dir__
$LOAD_PATH
を変更しない限り、同じディレクトリ構造からロードし続けるとよいでしょうが、その方法でスタックすることになります。
可能な限りクロスプラットフォームであることを保証するために、私がそれを実行した方法は次のとおりです。
require File.expand_path(File.join(*%w[ ... ]), File.dirname(__FILE__))
これは少し冗長ですが、ほとんどの場合、可能な限り最短のパスと最小限の構文フラフになります。
より具体的な例は次のとおりです。
require File.expand_path(File.join(*%w[ .. lib example ]), File.dirname(__FILE__))
これを$LOAD_PATH
への変更と組み合わせて、多数のファイルをロードしてこれを行う場合に物事を簡素化できます。
$LOAD_PATH << File.expand_path(File.join(*%w[ .. lib ]), File.dirname(__FILE__))
require 'example'
Ruby 1.8.xでは、コアに_require_relative
_がない場合、File.expand_path(...,__FILE__)
は機能しません。
___FILE__ == "/home/yourname/foo.rb"
_とします。 File.expand_path("bar.rb",__FILE__)
は_"/home/yourname/foo.rb/bar.rb
_を返します。
あなたが欲しいのは_"/home/yourname/bar.rb"
_を返すFile.expand_path("bar.rb",File.dirname(__FILE__))
です
backports gem から_require_relative
_を取得することもできます。