今週Railsにあったこと - 2023年7月28日
こんにちは、zzakです。 Railsのコードベースにあった変更を探索しましょう。
Rack::LintをRailsのミドルウェアのテストに適用
今週は技術的には利用者が目にするものはありませんでしたが、将来のRailsがRack
SPECとの互換性を維持し続けることになるということは重要です。
Rackに依存するライブラリに興味があったり保守していたりする向きには、Rack
3への更新の手引きで詳細を読めます。
ダンプ時にSchemaCacheの構成子を整列
このPRにより生成結果のスキーマキャッシュが一貫したものになり、ファイルダイジェストがキャッシュキーに使えるようになります。
音響分析器のメタ情報にタグを追加
この変更により、音響ファイルを分析する際、Active Storageによりメタ情報から追加のタグが提供されます。
例えばエンコーダーにアクセスする必要がある場合に便利でしょう。
“capture_emails”と”capture_broadcasts”を導入
このPRは “assert_emails” と “assert_broadcasts”
に以前加えられた未リリースの挙動を元に戻し、これら2つの新しいメソッドに追加します。
ActiveRecordの引用符で囲まれた名前がJRuby/TruffleRubyでスレッド安全にキャッシュされるように変更
このコミットはTruffleRubyでRailsアプリケーションを走らせる際のスレッド安全上の問題を解決します。
ActiveRecordの引用符で囲まれた名前のキャッシュはSQL問い合わせ構築時に更新されます。
2スレッドが同時に問い合わせを構築する場合、両方ともキャッシュの更新を試みることが有り得ます。
これにより2スレッドが全く異なるキャッシュストアを持つ事態が置こり得るため、異なるスレッド間で複数のキャッシュが生まれることになり、余剰のメモリを消費したり不具合修正で混乱したりする可能性がありました。
不要であればデータ伝送のinspectを抑止
現在 “ActionCable::Channel::Base#transmit”
の呼び出し時には毎回、与えられたデータオブジェクトをinspectするデバッグログ文言が生成されます。
この文言はロガーの水準がWARN以上であっても生成されます。
このパッチはログに記録される場合のみにこの文言が生成されるようにしています。
全てのキャッシュストアが”#delete”で真偽値を返すように変更
このPRは “Rails.cache.delete(‘key’)” の挙動が一貫したものになるようにし、項目が存在するときは “true”
を(あるいはそうでないときは “false” を)返すようにします。
以前はRedisCacheStoreをFileStoreは異なる挙動をしていました。
列挙体における “where.missing” と “where.associated” の挙動を復元
このPRは “associated” メソッドを呼ぶ際の回帰不具合を修正します。
不正確なSQL問い合わせになり紛らわしい結果になっていました。
キャッシュ項目の脱直列化を遅延化
この変更はキャッシュ最適化を加え、期限切れであったりバージョンが合わなかったりするキャッシュ項目について、値を脱直列化することなく検出できるようにしました。
この最適化はキャッシュ形式のバージョンが7.1以上のものか自前の直列化器を使っている場合に有効化されます。
キャッシュ圧縮器の置き換えに対応
このPRは直列化されたキャッシュ項目用に使われる圧縮機を置き換える対応を加えます。
置き換えには “config.cache_store” に “:compressor” オプションを指定します。
キャッシュされた値に責務を負う直列化器を置き換える “:coder” オプションと似ており、そちらでは
“ActiveSupport::Cache::Entry” インスタンス全体を直列化することに責務があるのでした。
変更の全一覧についてはこちらをご覧下さい。
この1週間に20名の方々からRailsのコードベースに貢献していただきました!
また次回!
購読するとこうした更新をメールで受け取れます。