वेबब्रिक बहु-थ्रेडेड है लेकिन रेल डेवलपर्स एक म्यूटेक्स को कड़ी-कोडित करते हैं, इसलिए यह एक समय में केवल एक अनुरोध को संभाल सकता है। आप बंदर-पैच Rails::Server
कर सकते हैं और आप एक बहु थ्रेडेड वेबब्रिक चलाने के लिए स्वतंत्र हैं।
बस ध्यान दें कि कॉन्फ़िगरेशन config.cache_classes = true
और config.eager_load = true
पर कॉन्फ़िगर किया जाएगा, जो RAILS_ENV=production
के लिए विशिष्ट है। ऐसा इसलिए है क्योंकि विकास में कक्षा रीलोडिंग थ्रेड सुरक्षित नहीं है।
प्राप्त करने के लिए WEBrick पूरी तरह से मल्टी-थ्रेडेड रेल 4.0 में, बस इस config/initializers/multithreaded_webrick.rb
में जोड़ें:
# Remove Rack::Lock so WEBrick can be fully multi-threaded.
require 'rails/commands/server'
class Rails::Server
def middleware
middlewares = []
middlewares << [Rails::Rack::Debugger] if options[:debugger]
middlewares << [::Rack::ContentLength]
Hash.new middlewares
end
end
rails/commands/server.rb
में अपमानजनक कोड नहीं है कि हम से छुटकारा मिला है:
# FIXME: add Rack::Lock in the case people are using webrick.
# This is to remain backwards compatible for those who are
# running webrick in production. We should consider removing this
# in development.
if server.name == 'Rack::Handler::WEBrick'
middlewares << [::Rack::Lock]
end
यह आवश्यक नहीं है रेल 4.2 पर। यह समवर्ती आउट ऑफ़ द बॉक्स है।
धन्यवाद, तुम मुझे कम उलझन में हैं। मैं एक ही समय में अधिक अनुरोधों के साथ परीक्षण करता हूं, ऐसा लगता है कि 10 से कम अनुरोधों को रेखांकित करने के बाद, Webrick विचार प्रस्तुत करेगा और फिर अन्य अनुरोधों को हल करेगा। –
मुझे लगता है कि Webrick एक थ्रेडेड सर्वर नहीं है, आप 'config.threadsafe' सेट कर सकते हैं! उत्पादन.आरबी में, फिर यह एक ही समय में बहु-अनुरोधों को हल करेगा। –
'config.threadsafe!' स्वचालित रूप से WEBrick बहु-थ्रेडेड नहीं बनायेगा।विवरण के लिए मेरा जवाब देखें। – Nowaker