还有什么是Rails控制器呢?

时间:2018-03-29 06:03:14

标签: ruby-on-rails ruby-on-rails-4 actioncontroller

我有一个Rails 4.2应用程序正在打印运输标签。 New Relic仪器显示它在控制器中花费了35%的时间(不包括控制器方法的操作),我不明白为什么。应用程序流程很简单:

  1. 验证用户
  2. 构建AR对象
  3. 验证地址(外部微服务呼叫)
  4. 计算价格
  5. 在Redis中生成跟踪号
  6. 坚持AR到PG
  7. 生成跟踪号
  8. 生成回复
  9. 步骤1通过查询PG的Devise完成。步骤2到8包含在LabelsController#generate中(更确切地说是控制器调用的服务类)。

    New Relic追踪显示了所有这些步骤以及它们需要多长时间。它显示了LabelsController#generate需要229ms - 但是没有CalculatePrice(138ms),DrawLabel(118ms)等,即使#generate调用CalculatePrice,DrawLabel等等。它只是新的Relic打破自定义跟踪的方法。如果我没有为所有这些添加特定的自定义跟踪,那么它将在#generate(将接近800ms)下正确地聚合CalculatePrice,DrawLabel,ValidateAddress等。所以...如果我已经检测了#generate中的所有步骤,那么控制器还需要做什么这么长时间(除了执行action方法的主体之外)?这是Rails锁定发生的地方吗?我认为这是其中一个中间件。

    这是在一个服务器实例上仅跟踪1个请求。

    New Relic screenshot

1 个答案:

答案 0 :(得分:0)

在我添加了更多的工具后,结果是控制器中另外33%的调用:JSON模式验证和设计验证。