يوفر 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.