كيف روبي تعرف مكان العثور على الملف المطلوب؟

StackOverflow https://stackoverflow.com/questions/417179

  •  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)

والذي يسمح لك أن تطلب أشياء من جذورها على ما أعتقد. نأمل أن هذا هو الجواب على أي حال!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top