Почему Rails сбрасывает соединение с Postgres при больших объемных вставках?

Я новичок в мире Linux и администрирования серверов, и я застрял.

У меня есть приложение rails, которому иногда нужно вставлять большие данные, обычно около 20 000 строк. Код, кажется, отлично работает в разработке (osx), но на производственных серверах (ubunto, на linode vps) он каждый раз дает сбой, обычно после примерно 1700 вставок. Точное число варьируется (1655, 1697, 1756), но оно неизменно находится на этом уровне.

Я не вижу много полезного в файле production.log. только что:

Connecting to database specified by database.yml

через секунду после отказа.

В главном журнале postgresql:

2012-10-21 23:01:28 EDT LOG:  could not receive data from client: Connection reset by peer
2012-10-21 23:01:28 EDT LOG:  unexpected EOF on client connection

Я использую Rails 3.2.8, ruby ​​1.9.3-p194, psql 1.9.4, nginx, unicorn.

Действительно следующие шаги развертывания, описанные в: http://railscasts.com/episodes/335-deploying-to-a-vps

Другие примечания:

а) Я пробовал оборачивать и не оборачивать вставки ActiveRecord в транзакцию. Нет разницы.

б) Ruby проделывает большую работу по сбору и организации данных перед их вставкой в ​​базу данных. Это включает в себя несколько вызовов стороннего веб-сервиса. Но я подтвердил, что эта связь прошла успешно, и данные в порядке.

Любые идеи? Или, по крайней мере, какие-либо предложения относительно того, где я могу продолжить расследование? Огромное спасибо,


person doublea    schedule 22.10.2012    source источник


Ответы (1)


Мораль этой истории такова: «Если сомневаешься, вини единорогов».

(Unicorn был настроен на тайм-аут рабочих процессов через 30 секунд.)

person doublea    schedule 23.10.2012