كيف روبي تعرف مكان العثور على الملف المطلوب؟
-
03-07-2019 - |
سؤال
وهنا هو سؤال واحد مبتدئ:
require 'tasks/rails'
ورأيت هذا الخط في Rakefile في مسار الجذر من كل مشروع القضبان. اعتقد يستخدم هذا الخط لمطالبة البائع / القضبان / railties / ليب / المهام / 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 }
وسؤالي هو لماذا يتم تحديد فقط "المهام / القضبان" للأسلوب تتطلب، ولكن ليس المسار الكامل للملف؟
وشكرا مقدما.
المحلول
وعند بدء تشغيل القضبان التطبيق الخاص بك تشغيله التكوين / boot.rb التي تدعو <لأ href = "http://github.com/rails/rails/tree/master/railties/lib/initializer.rb#L231" يختلط = "noreferrer"> Rails::Initializer.set_load_path
و thatsets حتى $LOAD_PATH
.
وروبي يستخدم تلك القائمة من الدلائل للعثور على الملفات المحددة على خط require
. إذا كنت تعطيه مسار مطلق مثل require '/home/lolindrath/ruby/lib.rb'
فإنه سيتم تخطي هذا البحث.
وهذا يماثل تقريبا #include <stdlib.h>
في C / C ++ حيث يبحث في مسار تشمل لكم إعطاء مترجم لتجد أن ملف الرأس.
نصائح أخرى
وأعتقد لأنه يتم تعيين مسارات الخاص بك في ملف /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)
والذي يسمح لك أن تطلب أشياء من جذورها على ما أعتقد. نأمل أن هذا هو الجواب على أي حال!