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

neu*_*mic 0 ruby-on-rails elixir ecto phoenix-framework

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

Mik*_*hot 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, []}]
Run Code Online (Sandbox Code Playgroud)

自定义记录器:

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