
يوفر Rack واجهة بسيطة وقابلة للتكيف لتطوير تطبيقات الويب في Ruby. من خلال تغليف طلبات واستجابات HTTP بأبسط طريقة ممكنة، فإنه يوحد ويقطّر الجسر بين خوادم الويب وأطر الويب وتطبيقات الويب في استدعاء أسلوب واحد.
تم توضيح التفاصيل الدقيقة لذلك في مواصفات الحامل، والتي يجب أن تتوافق معها جميع تطبيقات الحامل.
| إصدار | يدعم |
|---|---|
| 3.1.x | إصلاحات الأخطاء وتصحيحات الأمان. |
| 3.0.x | تصحيحات الأمان فقط. |
| 2.2.x | تصحيحات الأمان فقط. |
| <= 2.1.x | نهاية الدعم. |
يرجى الاطلاع على سياسة الأمان لمزيد من المعلومات.
هذا هو الإصدار الأخير من الرف. أنه يحتوي على إصلاحات الأخطاء وتصحيحات الأمان. يرجى مراجعة سجل التغيير للحصول على معلومات مفصلة حول تغييرات محددة.
يحتوي هذا الإصدار من الحامل على تغييرات مهمة تم تفصيلها في دليل الترقية. يوصى بالترقية إلى Rack 3 في أقرب وقت ممكن لتلقي أحدث الميزات وتصحيحات الأمان.
يتلقى هذا الإصدار من Rack تصحيحات الأمان فقط، ويجب بذل الجهد للانتقال إلى Rack 3.
بدءًا من Ruby 3.4، لن تعد تبعية base64 بمثابة جوهرة افتراضية، وقد تتسبب في تحذير أو خطأ بشأن فقدان base64 . لتصحيح ذلك، قم بإضافة base64 باعتباره تابعًا لمشروعك.
أضف جوهرة الرف إلى حزمة التطبيق الخاصة بك، أو اتبع الإرشادات المقدمة من إطار عمل الويب المدعوم:
# Install it generally:
$ gem install rack
# or, add it to your current application gemfile:
$ bundle add rack إذا كنت بحاجة إلى ميزات من Rack::Session أو bin/rackup فيرجى إضافة تلك الجواهر بشكل منفصل.
$ gem install rack-session rackup قم بإنشاء ملف يسمى config.ru بالمحتويات التالية:
run do | env |
[ 200 , { } , [ "Hello World" ] ]
endقم بتشغيل هذا باستخدام Rackup Gem أو خادم ويب آخر مدعوم.
$ gem install rackup
$ rackup
# In another shell:
$ curl http://localhost:9292
Hello Worldيتم دعم Rack بواسطة مجموعة واسعة من الخوادم، بما في ذلك:
سوف تحتاج إلى مراجعة وثائق الخادم لمعرفة الميزات والقيود التي قد تكون لديهم. بشكل عام، أي تطبيق Rack صالح سيعمل بنفس الطريقة على جميع هذه الخوادم، دون تغيير أي شيء.
يوفر Rack جوهرة منفصلة، وهي واجهة عامة لتشغيل تطبيق Rack على الخوادم المدعومة، والتي تشمل WEBRick و Puma و Falcon وغيرها.
تدعم هذه الأطر وغيرها الكثير مواصفات الحامل:
بين الخادم وإطار العمل، يمكن تخصيص Rack ليناسب احتياجات تطبيقاتك باستخدام البرامج الوسيطة. الرف نفسه يأتي مع البرامج الوسيطة التالية:
Rack::CommonLogger لإنشاء ملفات السجل بنمط Apache.Rack::ConditionalGet لإرجاع الاستجابات غير المعدلة عندما لا تتغير الاستجابة.Rack::Config لتعديل البيئة قبل معالجة الطلب.Rack::ContentLength لتعيين رأس content-length بناءً على حجم الجسم.Rack::ContentType لتعيين رأس content-type الافتراضي للاستجابات.Rack::Deflater لضغط الاستجابات باستخدام gzip.Rack::ETag لتعيين رأس etag على الأجسام التي يمكن تخزينها مؤقتًا.Rack::Events لتوفير خطافات سهلة عند تلقي طلب وعند إرسال الاستجابة.Rack::Files لخدمة الملفات الثابتة.Rack::Head لإرجاع جسم فارغ لطلبات HEAD.Rack::Lint للتحقق من التوافق مع مواصفات الحامل.Rack::Lock لتسلسل الطلبات باستخدام كائن المزامنة (mutex).Rack::MethodOverride لتعديل طريقة الطلب بناءً على المعلمة المقدمة.Rack::Recursive لتضمين البيانات من مسارات أخرى في التطبيق ولإجراء عمليات إعادة التوجيه الداخلية.Rack::Reloader لإعادة تحميل الملفات إذا تم تعديلها.Rack::Runtime لتضمين رأس الاستجابة مع الوقت المستغرق لمعالجة الطلب.Rack::Sendfile للعمل مع خوادم الويب التي يمكنها استخدام خدمة الملفات المُحسّنة لمسارات نظام الملفات.Rack::ShowException لالتقاط الاستثناءات غير المعالجة وتقديمها بطريقة لطيفة ومفيدة مع تتبع خلفي قابل للنقر.Rack::ShowStatus لاستخدام صفحات خطأ لطيفة لاستجابات أخطاء العميل الفارغة.Rack::Static لتقديم خدمة أكثر قابلية للتكوين للملفات الثابتة.Rack::TempfileReaper لإزالة الملفات المؤقتة التي يتم إنشاؤها أثناء الطلب.تستخدم جميع هذه المكونات نفس الواجهة الموضحة بالتفصيل في مواصفات الحامل. يمكن استخدام هذه المكونات الاختيارية بأي طريقة تريدها.
إذا كنت ترغب في التطوير خارج الأطر الموجودة، أو تنفيذ أطر العمل الخاصة بك، أو تطوير البرامج الوسيطة، فإن Rack يوفر العديد من المساعدين لإنشاء تطبيقات Rack بسرعة ودون القيام بنفس أشياء الويب في كل مكان:
Rack::Request الذي يوفر أيضًا تحليل سلسلة الاستعلام ومعالجة الأجزاء المتعددة.Rack::Response لإنشاء ردود HTTP ومعالجة ملفات تعريف الارتباط بشكل ملائم.Rack::MockRequest و Rack::MockResponse لإجراء اختبار فعال وسريع لتطبيق Rack بدون رحلات HTTP حقيقية ذهابًا وإيابًا.Rack::Cascade لتجربة تطبيقات Rack إضافية إذا قام أحد التطبيقات بإرجاع استجابة غير موجودة أو طريقة غير مدعومة.Rack::Directory لخدمة الملفات ضمن دليل معين، مع فهارس الدليل.Rack::MediaType لتحليل رؤوس نوع المحتوى.Rack::Mime لتحديد نوع المحتوى بناءً على امتداد الملف.Rack::RewindableInput لجعل أي كائن IO قابلاً للترجيع، باستخدام مخزن مؤقت للملفات.Rack::URLMap للتوجيه إلى تطبيقات متعددة داخل نفس العملية. يعرض Rack العديد من معلمات التكوين للتحكم في ميزات التنفيذ المختلفة.
param_depth_limit Rack :: Utils . param_depth_limit = 32 # defaultالحد الأقصى المسموح به من التداخل في المعلمات. على سبيل المثال، إذا تم التعيين على 3، فسيتم السماح بسلسلة الاستعلام هذه:
?a[b][c]=d
ولكن لن يُسمح بسلسلة الاستعلام هذه:
?a[b][c][d]=e
يؤدي تحديد العمق إلى منع حدوث تجاوز محتمل للمكدس عند تحليل المعلمات.
multipart_file_limit Rack :: Utils . multipart_file_limit = 128 # defaultالحد الأقصى لعدد الأجزاء ذات اسم الملف الذي يمكن أن يحتوي عليه الطلب. يمكن أن يؤدي قبول عدد كبير جدًا من الأجزاء إلى نفاد مقابض الملفات على الخادم.
الإعداد الافتراضي هو 128، مما يعني أنه لا يمكن لطلب واحد تحميل أكثر من 128 ملفًا مرة واحدة. اضبط على 0 بلا حدود.
يمكن أيضًا ضبطه عبر متغير البيئة RACK_MULTIPART_FILE_LIMIT .
(يُعرف هذا أيضًا باسم multipart_part_limit و RACK_MULTIPART_PART_LIMIT من أجل التوافق)
multipart_total_part_limitالحد الأقصى لإجمالي عدد الأجزاء التي يمكن أن يحتوي عليها الطلب من أي نوع، بما في ذلك حقول النموذج الملفية وغير الملفية.
الإعداد الافتراضي هو 4096، مما يعني أن الطلب الواحد لا يمكن أن يحتوي على أكثر من 4096 جزءًا.
اضبط على 0 بلا حدود.
يمكن أيضًا ضبطه عبر RACK_MULTIPART_TOTAL_PART_LIMIT متغير البيئة.
راجع CHANGELOG.md.
راجع CONTRIBUTING.md للحصول على تفاصيل محددة حول كيفية المساهمة في Rack.
الرجاء نشر الأخطاء والاقتراحات والتصحيحات لقضايا GitHub.
يرجى مراجعة سياسة الأمان الخاصة بنا للتعرف على عملية الكشف المسؤول والإبلاغ عن الأخطاء الأمنية. ونظرًا للاستخدام الواسع النطاق للمكتبة، فمن المفضل بشدة أن ندير التوقيت من أجل توفير تصحيحات قابلة للتطبيق في وقت الكشف. مساعدتكم في هذه المسألة هو موضع تقدير كبير.
rackup أداة مفيدة لتشغيل تطبيقات Rack من سطر الأوامر، بما في ذلك Rackup::Server (المعروف سابقًا Rack::Server ) لخوادم البرمجة النصية.
rack-contrib أدى العدد الكبير من البرامج الوسيطة المفيدة إلى ظهور الحاجة إلى مشروع يجمع برامج وسيطة جديدة من نوع Rack. تتضمن rack-contrib مجموعة متنوعة من المكونات الإضافية لـ Rack ومن السهل المساهمة بوحدات جديدة.
rack-sessionيوفر إدارة مريحة للجلسة لـ Rack.
يتكون فريق Rack Core من
وخريجي الرف
أود أن أشكر:
Rack::Deflater .Rack::ContentType .Rack::Response أفضل.Rack::Response .تم إصدار Rack بموجب ترخيص MIT.