Я получаю ActiveRecord::ConnectionTimeoutError
в демоне, который работает независимо от приложения rails. Я использую Passenger с Apache и MySQL в качестве базы данных.
Размер пула пассажиров по умолчанию равен 6 (по крайней мере, так говорит документация), поэтому он не должен использовать более 6 соединений.
Я установил размер пула ActiveRecord
равным 10, хотя я думал, что моему демону нужно только одно соединение. Мой демон - это один процесс с несколькими потоками, который тут и там вызывает ActiveRecord
, чтобы сохранить материал в базе данных, которую он разделяет с приложением rails.
Что мне нужно выяснить, так это то, что потоки просто не могут совместно использовать одно соединение или они просто продолжают запрашивать новые соединения, не освобождая свои старые соединения. Я знаю, что мог бы просто увеличить размер пула и отложить проблему, но у демона могут быть сотни потоков, и рано или поздно в пуле закончатся соединения.
Первое, что я хотел бы знать, это то, что Passenger действительно использует только 6 соединений, и что проблема заключается в демоне. Как мне это проверить?
Во-вторых, я хотел бы выяснить, нужно ли каждому потоку свое собственное соединение или ему просто нужно сказать, чтобы повторно использовать соединение, которое у них уже есть. Если им действительно нужны свои собственные связи, может, им просто нужно сказать, чтобы они не держались за них, когда они их не используют? Нити все-таки спят большую часть времени.