1
0

More than 1 year has passed since last update.

Rails 7.0にバージョンアップしたらquery_log_tagsを有効化しよう

Posted at

Profit

  • verbose_query_logs = true でない環境でrails serverのログが少し追いやすくなる
    • ActiveJobを使っている場合はジョブのログも
  • スロークエリログの発生箇所が少し特定しやすくなる

How to

Railsアプリケーションの設定に以下を追加するだけ

config.active_record.query_log_tags_enabled = true

# カスタマイズする場合は `query_log_tags=` を使って指定可能
config.active_record.query_log_tags = [ :controller, :action ]

前提知識

Verbose Query Logsについて

Railsアプリケーションを開発していてふとログを見た時に、SQLログのすぐ下にソースコードのどの行で呼ばれたのかが出力されている (下記参照) のが地味に便利だったりする。

  Article Load (0.2ms)  SELECT "articles".* FROM "articles"
  ↳ app/models/article.rb:5 # <- これ

これはActiveRecordの Verbose Query Logs という機能で、 config.active_record.verbose_query_logs = true のようにして設定を有効化できる。Rails 5.2以降にrails newされたアプリケーションであれば意図的に無効化していない限り config/environments/development.rb にこの記述があると思う。

ActiveRecord::QueryLogs

一方で、RAILS_ENV=productionな環境では通常 config.active_record.verbose_query_logs がtrueではないのでrails serverのログが手元で開発している時よりも追いづらかったりする。たとえば開発用にデプロイしたRailsアプリケーションの動作検証をしていて、何か期待通りに動かないなってときにデバッグが捗らない…なんてことがある。

このようなことを改善する手段のひとつとして、Rails 7.0で追加された ActiveRecord::QueryLogs が使える。ActiveRecord::QueryLogsを使うと、以下のようにSQLログのコメントにコントローラ名・アクション名やActiveJobを使っている場合はジョブ名などを含めることができる(どのような情報を含めるかはカスタマイズ可能)。

SELECT * FROM books /*application:MyApp;controller:books;action:index*/

Reference

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0