Ответ 1
Я думаю, что могут быть три виновника.
В новом приложении Rails есть следующее промежуточное программное обеспечение (Источник):
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
Каждый запрос вашего контроллера по существу проходит через каждое из этих промежуточных звеньев в цепочке один за другим.
Три из них связаны с базой данных и, следовательно, зависят от базы данных для каждого запроса. Вы заметите, что все они являются частью ActiveRecord
, которая является большой подсказкой для базы данных.
-
ActiveRecord::Migration::CheckPending
Это проверяет, есть ли ожидающие миграции в базе данных, прежде чем передавать запрос. Из того, что я могу сказать, глядя на исходный код, он проверяет ожидающие миграции в всех средах.
-
ActiveRecord::ConnectionAdapters::ConnectionManagement
За исключением среды тестирования, это промежуточное ПО очищает активные соединения db каждый запрос. Возможно, подключение к базе данных в этом промежуточном программном обеспечении блокирует действие вашего контроллера.
-
ActiveRecord::QueryCache
Это также может блокировать запросы базы данных. Он активен для всех сред, что я могу сказать.