为什么Rails在大型批量插入上丢弃Postgres连接?

时间:2012-10-22 03:32:17

标签: ruby-on-rails-3.2 postgresql-9.1 rails-postgresql

我是Linux和服务器管理领域的新品牌,我被卡住了。

我有一个rails应用程序偶尔需要执行大量数据插入,通常大约20,000行。代码似乎在开发(osx)中运行良好,但在生产服务器(ubunto,在linode vps上),它每次都失败,通常在大约1,700次插入之后。确切的数字会有所不同(1655,1677,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

其他说明:

a)我尝试过包装,而不是在事务中包装ActiveRecord插入。没有区别。

b)在插入数据库之前,Ruby正在做很多工作来收集和组织数据。这包括对第三方Web服务的多次调用。但我已经确认这些通信是成功的,数据看起来还不错。

有什么想法吗?或者至少有关于我可以继续侦察的建议吗?非常感谢,

1 个答案:

答案 0 :(得分:1)

故事的寓意是:“当有疑问时,责备独角兽。”

(Unicorn设置为在30秒后超时工作进程。)