2014-02-26 34 views
0

当我为包含几千条记录的表运行Model.all查询(例如Product.all)时,Rails控制台在15秒后终止。我可以扩展此阈值(我假设)还是以其他方式运行我的查询而不退出IRB?Rails控制台在生产15秒后死亡

我在生产中只有这个问题。在我的开发环境(sqlite数据库)中有很多记录,它工作得很好。

我正在运行Ruby 1.9.3,Ruby on Rails 3(与Unicorn)并使用postgres数据库。

回答

2

当您加载Product.all时,它会尝试一次加载所有产品,因此该进程无法分配足够的内存。一次加载所有产品是不好的做法。尝试分批加载产品。你可以这样做

Product.find_each do { |p| p.my_awesome_work } 

,而不是使用Product.all.each {....}

它不是在本地发生,因为你可能有强大的计算机,该计算机能够以很多的内存分配给某个进程是不是在heroku情况。

+0

就是这样。我认为服务器对于我们正在尝试做的事情有点不足。也许还有内存泄漏。 “.find_each”就像一个魅力。 – jakobkpoulsen

0

您可能会重载数据库的mem使用情况。你有在那里运行的吗?可能monit正在根据使用情况重新启动进程。

您可以在另一个终端屏幕上查看使用情况,还可以查看导轨日志。

看它是否给你的东西,如“失去了连接到数据库”

顺便说一句,一定要在督促运行控制台是这样的:

bundle exec rails c production -s 

-s是沙箱

+0

感谢您的回复。原来缺少内存。 – jakobkpoulsen

+0

这就是我认为“你可能会超载数据库内存使用量” – lsaffie