Rails控制台在生产15秒后被杀死

时间:2014-02-26 19:27:26

标签: ruby-on-rails ruby ruby-on-rails-3 postgresql irb

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

我在制作中只有这个问题。在我的开发环境(sqlite数据库)中有很多记录,它可以正常工作。

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

2 个答案:

答案 0 :(得分:2)

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

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

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

它不是在本地发生的,因为你可能拥有功能强大的计算机,计算机能够将大量内存分配给某些进程,而这在heroku中并非如此。

答案 1 :(得分:0)

您可能正在重载数据库内存使用量。你有monit在那里跑吗?也许monit正在根据使用情况重新启动流程。

你可以在另一个终端屏幕上发布top来查看用法,也可以在rails日志中找到尾部。

看看它是否为您提供了“丢失与数据库的连接”

顺便说一句,请确保在prod中运行这样的控制台:

bundle exec rails c production -s

-s是沙箱