WEBrick çok iş parçacıklıdır, ancak Rails geliştiricileri bir muteks kodlamasına sahiptir, bu nedenle aynı anda yalnızca bir isteği işleyebilir. Rails::Server
maymun yama yapabilir ve çok iş parçacıklı bir WEBrick'i çalıştırmakta özgürsünüz.
Sadece WEBrick'in RAILS_ENV=production
'a özgü olan config.cache_classes = true
ve config.eager_load = true
yapılandırmalarında çok iş parçacıklı olacağını unutmayın. Bunun nedeni, geliştirme aşamasında sınıfın iş parçacığı için güvenli olmamasıdır.
WEBrick tam çok kanallı Raylar 4.0, sadece
config/initializers/multithreaded_webrick.rb
eklemek bu almak için:
# 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
biz kurtulduk rails/commands/server.rb
kusurlu kodudur:
# 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
Bu ihtiyaç değil Raylarda 4.2. Eşzamanlı kutudan çıktı. senin env kurulum yapılandırma/ortamlar/development.rb (veya config/application.rb olarak)
bu satırı ekleyin altında
sayesinde, beni daha az karıştı olun. Aynı anda daha fazla istekle test ediyorum, 10'dan az istek dizildikten sonra, webrick görüntülemeleri oluşturacak ve ardından diğer istekleri çözecek gibi görünüyor. –
Bence webrick tek bir dişli sunucu değil, 'config.threadsafe!' production.rb'de, çoklu talepleri aynı anda çözecektir. –
'config.threadsafe!', WEBrick'i otomatik olarak çok iş parçacıklı hale getirmez.Detaylar için cevabımı görün. – Nowaker