在Rails for Ecto / Phoenix中是否有相当于子弹的宝石?

时间:2017-06-22 02:44:50

标签: ruby-on-rails elixir phoenix-framework ecto

我发现bullet gem是一个非常有用的工具,用于在Rails应用程序中捕获慢速数据库查询。是否有updateAction() / Ecto的类似工具可以帮助您通知N + 1和其他慢查询?

2 个答案:

答案 0 :(得分:6)

N+1查询不会发生在Ecto

必须使用preload

在查询中显式加载Ecto关联

如果您尝试访问尚未加载的关联,它将是Ecto.Association.NotLoaded的实例

对于其他慢查询,您可以将自定义记录器添加到ecto:

config :my_app, MyApp.Repo,
  adapter: Ecto.Adapters.Postgres,
  url: {:system, "DATABASE_URL"},
  loggers: [{Ecto.LogEntry, :log, []}, {MyApp.CustomLogger, :log, []}]

自定义记录器:

defmodule MyApp.CustomLogger do
  def log(entry) do
    if (entry.query_time > 1000_000) do
      Logger.info("Slow!!!!: #{entry.query}")
    end
  end
end

答案 1 :(得分:0)

我可以推荐你自己的宝石ecto_profiler