【问题标题】:Rails Console Killed After 15 Seconds in ProductionRails 控制台在生产中 15 秒后被杀死
【发布时间】:2014-02-26 19:27:26
【问题描述】:

当我对包含几千条记录的表运行 Model.all 查询(例如 Product.all)时,Rails 控制台会在 15 秒后被终止。我可以扩展这个阈值(我假设)或以其他方式在不退出 IRB 的情况下运行我的查询吗?

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    这不是在本地发生的,因为您可能拥有强大的计算机,计算机能够将那么多内存分配给某些进程,而在 heroku 中则不然。

    【讨论】:

    • 就是这样。我认为服务器对于我们正在尝试做的事情有点不足。也许也有内存泄漏。 “.find_each”就像一个魅力。
    【解决方案2】:

    您可能超载了数据库内存使用量。你有监视器在那里运行吗?也许 monit 正在根据使用情况重新启动进程。

    您可以在另一个终端屏幕上发出 top 以查看使用情况,也可以跟踪 rails 日志。

    看看它是否给你类似“失去与数据库的连接”之类的东西

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

    bundle exec rails c production -s
    

    -s 是沙盒

    【讨论】:

    • 感谢您的回复。原来是内存不足。
    • 这就是我的想法“您可能正在超载数据库内存使用量”
    猜你喜欢
    • 2012-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 2015-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多