【问题标题】:Is there an equivalent of the bullet gem in Rails for Ecto/Phoenix? [closed]Ecto/Phoenix 的 Rails 中是否有类似的子弹宝石? [关闭]
【发布时间】:2017-06-22 02:44:49
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    N+1 查询不会发生在 Ecto 中。

    必须使用 preload 在查询中显式加载 Ecto 关联

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

    至于其他慢查询,可以在ecto中添加自定义logger:

    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
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
      • @JessBowers 我怎样才能包含大而厚的宝石的重要部分?神经动力学要求子弹的类似物!不是代码的一部分!这是质量差和不负责任的评论
      • 是的,我明白你的意思。但是,如果您认为这对 SO 来说是一个坏问题(一个“购物问题”,它确实不符合 SO 对好问题的规则),在这种情况下不要回答,请否决这个问题。或者尝试编辑 Q 以使其更好。我只是想帮助您使用该网站,而不是想冒犯 - 我只是一名选民。
      猜你喜欢
      • 2015-05-07
      • 2012-05-08
      • 1970-01-01
      • 2011-08-12
      • 1970-01-01
      • 1970-01-01
      • 2011-03-04
      • 1970-01-01
      • 2021-12-18
      相关资源
      最近更新 更多