Rubyは、必要なファイルの場所をどのように知るのですか?
-
03-07-2019 - |
質問
初心者の質問がもう1つあります:
require 'tasks/rails'
RakefileのすべてのRailsプロジェクトのルートパスにこの行があります。この行は、すべてのrakeタスクを読み込むためにvendor / rails / railties / lib / tasks / rails.rbを要求するために使用されると思います:
$VERBOSE = nil
# Load Rails rakefile extensions
Dir["#{File.dirname(__FILE__)}/*.rake"].each { |ext| load ext }
# Load any custom rakefile extensions
Dir["#{RAILS_ROOT}/lib/tasks/**/*.rake"].sort.each { |ext| load ext }
Dir["#{RAILS_ROOT}/vendor/plugins/*/**/tasks/**/*.rake"].sort.each { |ext| load ext }
requireメソッドに「tasks / rails」のみを指定し、ファイルのフルパスを指定しないのはなぜですか?
事前に感謝します。
解決
Railsアプリを起動すると、 Rails::Initializer.set_load_path
および$LOAD_PATH
を設定します。
Rubyはそのディレクトリのリストを使用して、require
行で指定されたファイルを見つけます。 require '/home/lolindrath/ruby/lib.rb'
のような絶対パスを指定すると、その検索はスキップされます。
これは、C / C ++の#include <stdlib.h>
とほぼ類似しており、コンパイラに指定したインクルードパスを検索して、ヘッダーファイルを見つけます。
他のヒント
パスは/config/environment.rbファイルに設定されているためだと思います:
require File.join(File.dirname(__FILE__), 'boot')
もちろん。 /config/boot.rb(environment.rbで呼び出されます)で、RAILS_ROOTは次のように設定されます。
RAILS_ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(RAILS_ROOT)
これは、私が信じているルートからのものを要求することを可能にします。とにかくそれが答えだと思います!
所属していません StackOverflow