Rack::تحسينات المهلة لـ Rails
أضف هذا السطر إلى ملف Gemfile الخاص بالتطبيق الخاص بك:
gem "slowpoke"
وتشغيل:
rails generate slowpoke:install
يؤدي هذا إلى إنشاء public/503.html
يمكنك تخصيصه.
لتجربة صفحات الأخطاء المخصصة في التطوير، أضف مؤقتًا إلى config/environments/development.rb
:
config . slowpoke . timeout = 1
config . consider_all_requests_local = false
وأضف مكالمة sleep
إلى أحد أفعالك:
sleep ( 2 )
يجب أن تظهر صفحة الخطأ المخصصة.
المهلة الافتراضية هي 15 ثانية. يمكنك تغيير هذا في config/environments/production.rb
باستخدام:
config . slowpoke . timeout = 5
بالنسبة للمهلات الديناميكية، استخدم:
config . slowpoke . timeout = lambda do | env |
request = Rack :: Request . new ( env )
request . path . start_with? ( "/admin" ) ? 15 : 5
end
اشترك في المهلات مع:
ActiveSupport :: Notifications . subscribe "timeout.slowpoke" do | name , start , finish , id , payload |
# report timeout
end
لمعرفة المزيد، راجع وثائق Rack::Timeout.
يمكن أن يؤدي Rack::Timeout إلى ظهور استثناء في أي نقطة في الكود، مما قد يترك تطبيقك في حالة غير نظيفة. الطريقة الأكثر أمانًا للتعافي من مهلة الطلب هي إنشاء عملية جديدة. هذا هو السلوك الافتراضي لـ Slowpoke.
بالنسبة للخوادم المترابطة مثل Puma، هذا يعني إيقاف جميع الخيوط عند انتهاء مهلة أي منها. يمكن أن يكون لهذا تأثير كبير على الأداء.
يمكنك تخصيص هذا السلوك باستخدام:
Slowpoke . on_timeout do | env |
next if Rails . env . development? || Rails . env . test?
exception = env [ "action_dispatch.exception" ]
if exception && exception . backtrace . first . include? ( "/active_record/" )
Slowpoke . kill
end
end
ملاحظة: للوصول إلى env["action_dispatch.exception"]
قيد التطوير، أضف مؤقتًا إلى config/environments/development.rb
:
config . consider_all_requests_local = false
إنها فكرة جيدة أن تقوم بتعيين مهلة البيان ومهلة الاتصال. بالنسبة إلى Postgres، يجب أن يتضمن الملف config/database.yml
شيئًا مثل:
production :
connect_timeout : 3 # sec
variables :
statement_timeout : 5s
عرض سجل التغيير
ويتم تشجيع الجميع للمساعدة في تحسين هذا المشروع. فيما يلي بعض الطرق التي يمكنك من خلالها المساعدة:
للبدء في التطوير:
git clone https://github.com/ankane/slowpoke.git
cd slowpoke
bundle install
bundle exec rake test