كيف يمكنك تتبع التسلسل الكامل & ترتيب 'تتطلب في روبي التطبيق بمثابة الشجرة ؟

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

سؤال

كيف يمكنك عرض التسلسل الهرمي 'تتطلب أن تجري في روبي التطبيق ؟

بعض الملفات تتطلب الملفات التي تتطلب ملفات إضافية.

ومع ذلك, عن طريق تشغيل التطبيق في وضع التصحيح فقط الزناد مجموعة فرعية من الملفات المطلوبة - فقط تلك التي يتم استخدامها من قبل أيا كان فرعية من وظائف التطبيق الخاص بك يستخدم في أي نقطة في الوقت المناسب.

كيف يمكنك عرض شامل الهرمي من كل ما يتطلب في تطبيق مثل الشجرة ؟

هل كانت مفيدة؟

المحلول

المشكلة هي أنه في تطوير وضع جميع الملفات يتم تحميلها مع 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

هناك طريقة الكثير من هذه القضبان الجنون.

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