بالطبع، لقد توليت الأمر للتو. هناك بضعة أخرى تركتها وأنا غير متأكد منها، فماذا يجب أن أفعل بها؟ (byebug, ruby-prof, better_errors, rbtrace, gc_tracer, stackprof, memory_profiler)
ومع ذلك، فإننا عالقون تمامًا في Truffle حتى نتمكن من تشغيل mini_racer وفقًا للمذكور في:
من المرجح أن unicorn لن يعمل على TruffleRuby لأنه يعتمد على fork، لكنه في الواقع يتم تثبيته.
هل يمكن لـ Discourse أن يعمل على Puma بدلاً من ذلك؟ هل هناك أي إعدادات مطلوبة لذلك؟
هناك بضعة أخرى تركتها وأنا غير متأكد منها، ماذا يجب أن أفعل بها؟ (byebug, ruby-prof, better_errors, rbtrace, gc_tracer, stackprof, memory_profiler)
نعم، يبدو أن جميعها خاصة بـ MRI (حتى تبدأ في دعم خوادم خلفية مختلفة)، لذا الأفضل تحديد platforms: :mri حاليًا.
قد يعمل better_errors، لكن binding_of_caller لا يدعم TruffleRuby بعد.
يبدو أن هذه المكتبات أيضًا أدوات تصحيح وأداء في الغالب، ولا تبدو ضرورية لتشغيل التطبيق.
نعم، نحتاج إلى النظر في mini_racer.
أتساءل، في هذا السياق، لماذا يُستخدم JavaScript لعرض Markdown؟
للتأكد من أن النتيجة مطابقة تمامًا للنتيجة عند تشغيلها في متصفح العميل؟
من المؤكد أن wasm لن يكون خيارًا هنا، فحجم الحمولة سيكون أكبر بكثير، وهناك العديد من مشكلات الأمان المتعلقة بتشغيله بشكل صحيح مع سياسات المحتوى (CSPs) (ومخاوف CORS). إن تنفيذ markdown.it سريع بشكل مذهل وقابل للتوسع، مما يسمح باستخدام عدد كبير من الإضافات ووجود نظام بيئي واسع موجود مسبقًا.
بعض السياق الإضافي حول mini_racer. منذ اليوم الأول في Discourse، أصررنا على وجود خط معالجة واحد لطهي markdown، مما أزال تمامًا فئة مزعجة من الأخطاء التي واجهتها في Stack Overflow حيث كان الخادم والعميل يتحدثان لهجات مختلفة قليلاً. بالنسبة لـ Discourse، هذا أكثر أهمية لأن الإضافات يمكنها تعديل خط المعالجة. على سبيل المثال:
يتم تنفيذه في إضافة (تحليل [])
لدينا العديد من ميزات “جودة الحياة” التي نحصل عليها باستخدام unicorn والاعتماد على التفرع، انظر:
على وجه التحديد، نراقب وندير عملية فرعية لـ sidekiq من العملية الرئيسية.
لكن… لا يحتوي truffle على GIL، وpuma موجود بالفعل في Gemfile بمجرد عمل mini_racer، يمكننا التعاون في إعداد truffle يحافظ على الذاكرة ويحافظ على sidekiq وpuma في نفس العملية. أو يمكن للأشخاص ببساطة بدء عملية sidekiq يدويًا. يمكن لـ Puma بالتأكيد العمل، فنحن نستخدم Rack.hijack على نطاق واسع، لكن ذلك مُنفذ بالفعل عبر Puma/Unicorn/Passenger.