كيف يمكنك تتبع التسلسل الكامل & ترتيب 'تتطلب في روبي التطبيق بمثابة الشجرة ؟
-
06-07-2019 - |
سؤال
كيف يمكنك عرض التسلسل الهرمي 'تتطلب أن تجري في روبي التطبيق ؟
بعض الملفات تتطلب الملفات التي تتطلب ملفات إضافية.
ومع ذلك, عن طريق تشغيل التطبيق في وضع التصحيح فقط الزناد مجموعة فرعية من الملفات المطلوبة - فقط تلك التي يتم استخدامها من قبل أيا كان فرعية من وظائف التطبيق الخاص بك يستخدم في أي نقطة في الوقت المناسب.
كيف يمكنك عرض شامل الهرمي من كل ما يتطلب في تطبيق مثل الشجرة ؟
المحلول
المشكلة هي أنه في تطوير وضع جميع الملفات يتم تحميلها مع load
بدلا من require
بحيث يمكن إعادة شحنها على كل طلب.في الإنتاج يتم تحميلها مرة واحدة فقط.باستثناء بعض من إطار حصص معظم الملفات لا تزال تحميلها فقط عندما استخدم لأول مرة.يحدث هذا لأن ActiveSupport يتجاوز const_missing تلقائيا محاولة الحمل غير معروف الثوابت من الملفات مع نظام التسمية (ConstantName.to_s.underscore
من شأنه أن يعطي require 'constant_name'
).هذا بالطبع حقا الفوضى حتى 'مطلوب' الهرمي.
بالنسبة تافهة الحالة ، يمكنك تعديل التالية لتلبية بعض الاحتياجات الخاصة بك (كما تحقق من تبعيات في active_support)
$require_level = []
alias :orig_require :require
def require(file)
puts "#{$require_level.join}#{file}"
$require_level << "-"
r = orig_require(file)
$require_level.pop
r
end
require 'foo'
require 'baz'
ben@legba-2:~ $ ruby check_requires.rb
foo
-bar
baz
حظا سعيدا
تحرير:تفسير
ما يفعله ذلك هو إنشاء مجموعة عالمية لتخزين مستوى تداخل يتطلب.الأول يضع النواتج الملف المطلوب.ثم اندفاعه يضاف إلى مستوى التداخل.الملف المطلوب فعلا.إذا كان تحميل الملف المكالمات تتطلب ، ثم هذا كله تبدأ العملية مرة أخرى, إلا أن مستوى تداخل 1 العميق لذلك "-#{ملف}" هو يضع ed.وتتكرر هذه العملية إلا مستوى التداخل ينمو ، لذلك شرطات.بعد ملف و كل من تبعيات يتم تحميلها ، تتطلب تقلع داش أنه إضافة لذلك أن مستوى التداخل في نفس الحالة التي كان عليها عندما تتطلب بدأت.هذا يحافظ على هيكل الشجرة دقيقة.
const_missing مشابه method_missing.في الأساس, مثل عند استدعاء AnObject.some_unknown_method
روبي سوف اتصل AnObject.method_missing(:some_unknown_method)
قبل رفع NoMethodError باستخدام SomeUnknownConstant يتسبب const_missing(:SomeUnknownConstant)
قبل رفع NameError.القضبان يعرف const_missing مثل أنه سيتم بحث معينة مسارات الملفات التي قد تحدد في عداد المفقودين مستمرة.ويستخدم اصطلاح التسمية لتسهيل هذه العملية ، على سبيل المثال SomeUnknownConstant
ومن المتوقع أن يكون في some_unknown_constant.rb
هناك طريقة الكثير من هذه القضبان الجنون.