Spec-Zone.ru › Ruby on Rails 7.2

модуль 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

  • source_location

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 100
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