找出导致Rails请求缓慢的原因

时间:2013-04-24 21:57:44

标签: ruby-on-rails activerecord

我在控制器中看到对创建操作的请求非常慢(所有其他操作都在可接受的限制内)。记录日志告诉我,视图和活动记录虽然不是最快,但只是总加载时间的一小部分。这就是我所看到的:

Completed 200 OK in 37023ms (Views: 530.1ms | ActiveRecord: 251.2ms | Sphinx: 0.0ms)

有没有办法看到余下的时间花在哪里?我试过Mini Profiler,但它并没有告诉我花费的时间。

为了添加一些额外的上下文,模型(Story)有一个has_many:through,它将它连接到User模型。似乎只有在将用户分配到故事时才会出现减速。如果未选择任何用户,则响应时间正常。问题可能是缺少连接模型上的索引吗?

2 个答案:

答案 0 :(得分:0)

我的一个做法是为您的操作添加日志。 e.g。

def some_action_which_is_very_slow
  logger.debug "== line 1, #{Time.now}"
  # statement 1 
  logger.debug "== line 2, #{Time.now}"
  # statement 2 
  logger.debug "== line 3, #{Time.now}"
  # statement 3
end

P.S。使用#{Time.now}是不够智能的。您应该配置日志文件以支持时间格式。我建议使用log4r。看到这个堆栈帖子:How to configure Log4r with Rails 3.0.x?

答案 1 :(得分:0)

使用这样的基准:

def some_action
    benchmark 'running queries' do
       # some code for running queries
    end
    benchmark 'some other operation' do
       # some other code
    end
end

您将在developement.log中获得结果。您也可以在视图中使用它:

<% benchmark 'some partial' do %>
    <div>copde here</div>
<% end %>