Myślę, że może być trzech winowajców.
Aplikacja świeże szyn posiada następujące warstwy pośredniej (Source):
use Rack::Sendfile
use ActionDispatch::Static
use Rack::Lock
use #<ActiveSupport::Cache::Strategy::LocalCache::Middleware:0x000000029a0838>
use Rack::Runtime
use Rack::MethodOverride
use ActionDispatch::RequestId
use Rails::Rack::Logger
use ActionDispatch::ShowExceptions
use ActionDispatch::DebugExceptions
use ActionDispatch::RemoteIp
use ActionDispatch::Reloader
use ActionDispatch::Callbacks
use ActiveRecord::Migration::CheckPending
use ActiveRecord::ConnectionAdapters::ConnectionManagement
use ActiveRecord::QueryCache
use ActionDispatch::Cookies
use ActionDispatch::Session::CookieStore
use ActionDispatch::Flash
use ActionDispatch::ParamsParser
use Rack::Head
use Rack::ConditionalGet
use Rack::ETag
run Rails.application.routes
Każde żądanie do kontrolera zasadniczo przechodzi przez każdy z tych middleware w łańcuchu, jeden po drugim.
Trzy z nich są powiązane z bazą danych, a zatem zależą od bazy danych dla każdego żądania. Zauważysz, że wszystkie one są częścią ActiveRecord
, co jest wielką wskazówką, że baza danych jest zaangażowana.
ActiveRecord::Migration::CheckPending
ta sprawdza, czy istnieją oczekujące migracje w bazie danych przed przekazaniem wniosku przez. Z tego co widzę patrząc na kod źródłowy, sprawdza on oczekujące migracje w wszystkich środowiskach.
ActiveRecord::ConnectionAdapters::ConnectionManagement
wyjątkiem enviornment testowania, to middleware czyści aktywne połączenia db każde żądanie. Być może połączenie z bazą danych w tym oprogramowaniu pośredniczącym blokuje działanie kontrolera.
ActiveRecord::QueryCache
To może być również blokowanie żądań bazy danych. Jest aktywny dla wszystkich środowisk z tego, co mogę powiedzieć.
IMO zależy to od środowiska: z jakiego serwera korzystasz? Czy jesteś w środowisku "rozwoju" lub "produkcji"? Czy serwer działa już od jakiegoś czasu, kiedy testujesz to zachowanie, czy serwer właśnie się uruchomił lub przestał działać przez dłuższy czas? – spickermann
Proponuję, aby zbadać swoje middlewares. Jedna z nich może z łatwością korzystać z blokowania IO do/z bazy danych. Opublikuj tutaj stos oprogramowania pośredniego. – mudasobwa
Co masz na myśli mówiąc "blokuje"? Czy widzisz jakieś błędy? – AJFaraday