質問

初心者の質問がもう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)

これは、私が信じているルートからのものを要求することを可能にします。とにかくそれが答えだと思います!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top