Spec-Zone.ru › Ruby on Rails 7.1

модуль ActiveRecord::QueryLogs

Журналы запросов Active Record

Автоматически добавляет комментарии к SQL-запросам с метками информации о времени выполнения. Это можно использовать для отслеживания проблемных SQL-запросов до кода приложения, который сгенерировал эти запросы.

Журналы запросов можно включить через конфигурацию Rails в config/application.rb или в инициализаторе:

config.active_record.query_log_tags_enabled = true

По умолчанию регистрируется имя приложения, имя и действие контроллера или имя задачи. По умолчанию используется формат SQLCommenter. Метки, отображаемые в комментариях к запросам, можно настроить через конфигурацию Rails:

config.active_record.query_log_tags = [ :application, :controller, :action, :job ]

Active Record определяет доступные по умолчанию метки:

  • application

  • pid

  • socket

  • db_host

  • database

Action Controller добавляет метки по умолчанию при загрузке:

  • controller

  • action

  • namespaced_controller

Active Job добавляет метки по умолчанию при загрузке:

  • job

Новые метки комментариев можно определить, добавив их в Hash к меткам Array. Метки могут содержать динамическое содержимое, задав значение Proc или лямбда-значение в Hash, и могут ссылаться на любые значения, сохранённые Rails в объекте context. ActiveSupport::CurrentAttributes можно использовать для хранения значений приложения. Метки с nil значениями опускаются из комментария к запросу.

Экранирование выполняется для строки, возвращаемой функцией, однако не следует использовать недоверенные данные пользователя.

Пример:

config.active_record.query_log_tags = [
  :namespaced_controller,
  :action,
  :job,
  {
    request_id: ->(context) { context[:controller]&.request&.request_id },
    job_id: ->(context) { context[:job]&.job_id },
    tenant_id: -> { Current.tenant&.id },
    static: "value",
  },
]

По умолчанию имя приложения, имя и действие контроллера или имя задачи регистрируются с использованием формата SQLCommenter. Это можно изменить через config.active_record.query_log_tags_format

Комментарии меток можно добавлять в начало запроса:

ActiveRecord::QueryLogs.prepend_comment = true

Для приложений, где содержимое не будет меняться в течение времени выполнения запроса или задачи, метки могут кэшироваться для повторного использования в каждом запросе:

config.active_record.cache_query_log_tags = true

Методы публичного класса

update_formatter(format) Показать исходный код
# File activerecord/lib/active_record/query_logs.rb, line 99
def update_formatter(format)
  self.tags_formatter =
    case format
    when :legacy
      LegacyFormatter.new
    when :sqlcommenter
      SQLCommenter.new
    else
      raise ArgumentError, "Formatter is unsupported: #{formatter}"
    end
end

Обновляет форматер на указанный формат.

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API