Rails Foundation Docs, Query Logs source_location, Dockerfile gets jemalloc | This Week in Rails
https://world.hey.com/this.week.in.rails/rails-foundation-docs-query-logs-source_location-dockerfile-gets-jemalloc-058a720b
rails foundation ラベルのプルリクエスト
既存のRailsドキュメントを改善するためのチームが結成されました
レビューのために1週間ほどOpenにしておく方針のようです
現在は ActiveJob.perform_all_later, Action Text, Action Mailbox についてのドキュメント改善のプルリクエストが出されています
Fix JSON-encoding ActiveStorage::Filename by jdelStrother · Pull Request #50982 · rails/rails · GitHub
ActiveStorageに関する変更です
ActiveStorage::Filename をJSONエンコードする際に、無効なJSONが生成されてしまう問題がありました
これはファイル名がクオートで括られていないためです
ActiveStorage::Filename#to_json を削除することで解決しています
to_json メソッドでは単に to_s をしていました
このメソッドを削除することで ActiveSupport::ToJsonWithActiveSupportEncoder の実装に任されることになり、ファイル名がクオートで括られるようになります
Rails の to_json には便利なオプションを渡せるよ - tanaken’s blog
code:rb
# Encode the given object into a JSON string
def encode(value)
stringify jsonify value.as_json(options.dup)
end
value は ActiveStorage::Filename のオブジェクト
as_json は to_s (from: rails/activestorage/app/models/active_storage/filename.rb at 54d3934d)
code:rb
def as_json(*)
to_s
end
code:rb
def jsonify(value)
case value
when String
EscapedString.new(value)
when Numeric, NilClass, TrueClass, FalseClass
# ...
end
end
code:rb
def stringify(jsonified)
::JSON.generate(jsonified, quirks_mode: true, max_nesting: false)
end
Support :source_location tag option for query log tags by fatkodima · Pull Request #50969 · rails/rails · GitHub
ActiveRecordに関する変更です
ActiveRecord::QueryLogs というモジュールがあります
アプリケーションが実行するSQLに関する情報を記録し、デバッグやパフォーマンスのチューニングに活用するためのものです
code:config/application.rb
config.active_record.query_log_tags_enabled = true
とすることで有効化できます
デフォルトでは次の4つの情報が記録されます
アプリケーション名
コントローラ名
アクション名
ジョブ名
code:config/application.rb
config.active_record.query_log_tags = :application, :controller, :action, :job
ただし、本番環境での使用は慎重に検討する必要があります
本番環境でこの機能を有効にすると、ログが大量に生成される可能性があるため、パフォーマンスに影響を与えることがあります
今回のプルリクエストでは、クエリを実行しているソースコードの位置も記録できるようになりました
code:config/application.rb
config.active_record.query_log_tags << :source_location
ソースコードの位置情報の計算にはコストが掛かるので、本番環境での利用にはさらに慎重になる必要があります。この旨は activerecord/CHANGELOG.md にも明記されました。