Ruby on Rails 7.1.2がリリースされました。内容はバグ修正です。
Rails 7.1.2 has been released! https://t.co/j6AoJYoRMN
— Ruby on Rails (@rails) November 10, 2023
英語版Changelogをまとめて見るにはGItHubのリリースタグ↓が便利です。
- Release 7.1.2 · rails/rails(日本時間2013/11/11 06:53)
詳しくは以下のコミットリストをご覧ください。
🔗 更新の概要
アップグレード方法については以下の手順をどうぞ。
参考: § 1.3 アップグレード手順 -- Rails アップグレードガイド - Railsガイド
本記事では、GitHubリリースタグに掲載されているChangelogに対応するプルリクやコミットへのリンクを取り急ぎ貼りました。以下は更新のあった機能だけを取り上げています。また、同一機能内で同じプルリクに属するChangelog項目はまとめています。
なお、Changelogには記載されていませんが、APIドキュメントやガイドの更新も行われています。
🔗 Active Support
🔗 PR: Fix RedisCacheStore#write_multi with :expires_in by fatkodima · Pull Request #49974 · rails/rails
RedisCacheStore#write_multiの:expires_inオプションが効かない問題を修正。fatkodima
同CHANGELOGより
修正: #49973
この
:expires_inオプションはキーワード引数として切り出されていたが使われていなかった。同PRより
参考: Rails API write_multi -- ActiveSupport::Cache::Store
🔗 Fix decoding data encoded using a non-String purpose by intrip · Pull Request #49669 · rails/rails
Messageシリアライザで非文字列"purpose"フィールドのデシリアライズの不具合を修正。
Jacopo Beschi
同CHANGELOGより
非文字列の"purpose"フィールドと
use_message_serializer_for_metadata == falseでエンコードされたデータが誤ってデコードされ、デコード中に"mismatched purpose"エラーが発生していた。
両側をStringとして比較するようにすることでこの問題を修正。
同PRより
🔗 [Fix #49796] Prevent global cache options being overwritten by HolyWalley · Pull Request #49800 · rails/rails
ActiveSupport::Cache::Store#fetchブロック内で動的オプションを設定した場合に、グローバルキャッシュオプションが上書きされないよう修正。Yasha Krasnou
同CHANGELOGより
🔗 Fix deprecation warnings for secrets:edit/show by stevegeek · Pull Request #49792 · rails/rails
requireがなかったためにbin/rails secrets:showやbin/rails secrets:editを実行するとNoMethodErrorエラーになる問題を修正。Stephen Ierodiaconou
同CHANGELOGより
🔗 Ensure {down,up}case_first returns non-frozen string by jonathanhefner · Pull Request #49837 · rails/rails
downcase_firstやupcase_firstは、空文字""の場合にfrozenの文字列を返していた。# 修正前 "foo".downcase_first.frozen? # => false "".downcase_first.frozen? # => true# 修正後 "foo".downcase_first.frozen? # => false "".downcase_first.frozen? # => false同PRより
🔗 Handle negative numbers in NumberToHumanSizeConverter by Earlopain · Pull Request #49791 · rails/rails
#to_fs(:human_size)が負の値でも正常に動作するよう修正。Earlopain
同CHANGELOGより
参考: 週刊Railsウォッチ20231107: number_to_human_sizeで負数を扱えるよう修正
🔗 Add BroadcastLogger#deep_dup by andrewn617 · Pull Request #49720 · rails/rails
要点: BroadcastLogger#dupがロガーのbroadcastsを複製できなかったため、deep_dupを追加。
参考: 週刊Railsウォッチ20231107: BroadcastLogger#deep_dupを追加
🔗 Fix issue where bootstrap.rb overwrites the level of a BroadcastLogger's broadcasts by andrewn617 · Pull Request #49721 · rails/rails
BroadcastLoggerでbroadcastsのlevelをbootstrap.rbが上書きしていたのを修正。Andrew Novoselac
同CHANGELOGより
🔗 Handle outdated Marshal payloads in Cache::Entry with 6.1 cache_format by casperisfine · Pull Request #49716 · rails/rails
ActiveSupport::CacheがRails 6.1フォーマットの古いMarshalペイロードを処理できるよう修正。Active SupportのCacheは、Marshalのデシリアライズできなくなったペイロードをキャッシュミスとして扱うことを想定していた。Rails 6.1のレガシーフォーマットでは圧縮ペイロードでこれが失敗していた。
Jean Boussier
同CHANGELOGより
🔗 Fix OrderedOptions#dig for array indexes by fatkodima · Pull Request #49718 · rails/rails
#44644で追加された
OrderedOptions#digでは、最初のキーだけシンボルに変換する必要がある。修正: #49713
同PRより
🔗 Fix time travel helpers to work when nested using with separate classes by fatkodima · Pull Request #49711 · rails/rails
別のクラスでネストされていても
travel_toタイムトラベルヘルパーが動作するよう修正。fatkodima
同CHANGELOGより
参考: Rails API travel_to -- ActiveSupport::Testing::TimeHelpers
🔗 Fix file cache store delete_matched to work on keys longer than allowed filename size by fatkodima · Pull Request #49694 · rails/rails
修正: #49690
ファイルキャッシュストアでは、ファイルシステムパスの
/などの区切り文字クラッシュしないようURLエンコードされたキーを使っている。得られたキーがファイルシステム最大ファイル名長さを超える場合は部分に分割するが、この分割は境界上で行われるべきであるにもかかわらず、誤ってエンコードシーケンス内で行われることがあった。例: キー
foo%20barが['foo%2', '0bar']と分割されるのは誤り。分割は['foo', '%20bar']または['foo%20', 'bar']となるべき。これに続いて
delete_matchedメソッドを利用すると、ファイルシステムディレクトリをトラバースしてディレクトリ名のデコードを試みるが、その前に行われた分割の場所が誤っている場合はエラーになる。
同PRより
🔗 ActiveSupport::LogSubscriber restore compatibility with SemanticLogger by casperisfine · Pull Request #49621 · rails/rails
semantic_loggergemとの互換性を修正。
semantic_loggergemの振る舞いはstdlibロガーと完全に同じではない。stdlibのLogger#levelがIntegerを返すのに対し、SemanticLogger#levelはSymbolを返す。このため、
SemanticLoggerインスタンスを代入するとRailsでさまざまなLogSubscriberクラスが壊れた。Jean Boussier, ojab
同CHANGELOGより
🔗 Active Model
🔗 Make ==(other) method of AttributeSet safe #49670 by DmitryPogrebnoy · Pull Request #49677 · rails/rails
==(other)メソッドにAttributeSetのインスタンスを渡してもエラーにならないよう修正。Dmitry Pogrebnoy
同CHANGELOGより
🔗 Active Record
🔗 Fix renaming primary key index when renaming a PostgreSQL table having uuid primary key by fatkodima · Pull Request #49998 · rails/rails
PostgreSQLでUUID主キーを持つテーブルをリネームするときに主キーインデックスがリネームされなかった問題を修正。
fatkodima
同CHANGELOGより
🔗 [Fix #48535]: fix behavior of proc_for_binds in Arel::Nodes::HomogenousIn by JohnAnon9771 · Pull Request #49050 · rails/rails
fieldがシリアライズド属性の場合(例:fieldでActiveRecord::Base.serializeが使われている、fieldがJSONカラムである)のwhere(field: values)クエリの振る舞いを修正。João Alves
同CHANGELOGより
動機/背景
このプルリクは、issue #48535と#48072を修正する。
プルリク#41068が導入されたことで、意図しない振る舞いが表面化し、キャスト済みの属性に対して
proc_for_bindsがキャストを適用する原因となった。その結果、上のissueで指摘されているようにクエリが誤動作するようになった。このコミットでは、型を
ActiveModel::Type.default_valueに置き換えて、2回目のシリアライズで事実上何も行わないようにすることで問題を修正する。この修正によって、「#41068以後の決定論的クエリの修正(詳しくは37361bf -- リンク切れ)」などの変更は不要になった(そうした変更では、元々HomogeneousIn内にあるproc_for_bindsを対象としていたテストが誤ってInWithAdditionalValues内のproc_for_bindsをテストするようになっていた。これによって、HomogeneousIn内のproc_for_bindsに対して調整を行うたびに偽陽性が発生していた)。
🔗 Prevent marking broken connections as verified by composerinteralia · Pull Request #49811 · rails/rails
壊れたコネクションが誤って"verified"とマーキングされないよう修正。
Daniel Colson
同CHANGELOGより
🔗 Don't mark Float::INFINITY as changed if didn't by MaicolBen · Pull Request #49904 · rails/rails
Float::INFINITYの同じ値を再代入したときに"changed"とマーキングされないよう修正。浮動小数点の無限大値を持つレコードを保存したときに"changed"とマーキングすべきではない。
Maicol Bentancor
同CHANGELOGより
🔗 return nil for ActiveRecord::Base.table_name by a5-stable · Pull Request #49911 · rails/rails
ActiveRecord::Base.table_nameが"undefined methodabstract_class?for Object:Class"エラーを発生していたのを、nilを返すよう修正。a5-stable
同CHANGELOGより
🔗 Fix upserting for custom :on_duplicate and :unique_by consisting of all inserts keys by fatkodima · Pull Request #49870 · rails/rails
修正: #49867
従来は、
@on_duplicate = :skip if @on_duplicate == :update && updatable_columns.empty?を実行すると、「カスタムの:on_duplicateを渡したこと」「@on_duplicateがconfigure_on_duplicate_update_logicで定義済みであること」が誤って無視されていた。そのため、このロジックをこのメソッドに移動した。
同PRより
🔗 Do not rely on dup in forgetting_assignment optimization by jonathanhefner · Pull Request #49832 · rails/rails
レコードを保存すると属性が誤って
dupされる可能性がある問題(#49809)を修正。Jonathan Hefner
同CHANGELOGより
🔗 Dump schema only for a specific db for rollback/up/down tasks for multiple dbs by fatkodima · Pull Request #49793 · rails/rails
マルチDBのrollback/up/downタスクで、指定以外のDBスキーマがダンプされないよう修正。
fatkodima
同CHANGELOGより
参考: 週刊Railsウォッチ20231107: マルチDBのrollback/up/downで指定していないDBスキーマをダンプしないよう修正
🔗 Fix (2) case in money.rb by arBmind · Pull Request #49779 · rails/rails
PostgreSQLの
money型の値でカンマ,が小数点として使われていて、かつ通貨記号が冒頭にない場合(例:"3,50"をキャストする場合)にNoMethodErrorが発生する問題を修正。Andreas Reischuck and Jonathan Hefner
同CHANGELOGより
参考: 週刊Railsウォッチ20231107: PostgreSQLのmoney型へのキャストが特定の値でエラーになる問題を修正
🔗 Support non-column-backed attributes for enum by jonathanhefner · Pull Request #49769 · rails/rails
カラムのない属性での
enumの利用を再度有効にした。
従来のようにカラムのない属性を宣言するときは、以下のように明示的に型を指定しなければならない。class Post < ActiveRecord::Base attribute :topic, :string enum topic: %i[science tech engineering math] endJonathan Hefner
同CHANGELOGより
参考: 週刊Railsウォッチ20231107: enumでカラムのない属性のサポートが復活
🔗 Raise on foreign_key: being passed as an array in associations by nvasilevski · Pull Request #49625 · rails/rails
foreign_key:オプションに関連付けとして配列を渡すと例外を発生するよう修正。Nikita Vasilevsky
同CHANGELOGより
参考: 週刊Railsウォッチ20231024: foreign_key:オプションに誤って配列を渡すと例外を発生するよう変更
🔗 Return back maximum allowed PostgreSQL table name to 63 characters by fatkodima · Pull Request #49592 · rails/rails
PostgreSQLで許される最大テーブル名長さを63文字に戻した。
fatkodima
同CHANGELOGより
修正: #49567
従来、強制する最大テーブル名長さが63文字から
63 - "_pkey".sizeに変更されていたのを63文字に戻し、テーブル名のりネーム時に主キー名やシーケンス名(PostgreSQLがテーブル作成時に生成する名前)を手動で構築するようにした。テストは#45136でカバー済みなので新しいテストは足していない。
cc: @rafaelfranca
同PRより
関連: 週刊Railsウォッチ20220620: テーブル名の長さに上限を設定
🔗 Fix detecting IDENTITY columns for PostgreSQL < 10 by fatkodima · Pull Request #49598 · rails/rails
バージョン10より前のPostgreSQLで
IDENTITYカラムが検出されていたのを修正。fatkodima
同CHANGELOGより
🔗 Action View
🔗 Handle negative numbers in NumberToHumanSizeConverter by Earlopain · Pull Request #49791 · rails/rails
number_to_human_sizeビューヘルパーが負数を正しく扱えるよう修正。Earlopain
同CHANGELOGより
参考: 週刊Railsウォッチ20231107: number_to_human_sizeで負数を扱えるよう修正
🔗 Ignore implicit locals if not declared by templates with strict locals by byroot · Pull Request #49782 · rails/rails
暗黙のlocalsを受け取れないテンプレートをコレクションレンダリングしたときに注入される
localsを自動的に破棄するよう修正。コレクションをレンダリングすると2つの変数が注入されるため、strictな
localsを使うテンプレートが壊れていた。修正によって、テンプレートが実際にそれらの変数を受け取り可能な場合にのみ、それらの変数が渡されるようになった。
Yasha Krasnou, Jean Boussier
同CHANGELOGより
🔗 Fix rails-ujs auto start() in bundled environments [7-1-stable] by skipkayhil · Pull Request #49773 · rails/rails
JSバンドラーを使ったときに
@rails/ujsがstart()を余分な回数呼び出していたのを修正。Hartley McGuire, Ryunosuke Sato
同CHANGELOGより
参考: 週刊Railsウォッチ20231107: @rails/ujsを7.1.0にしたときの読み込みエラーを修正
🔗 Fix capture view helper for HAML and Slim by casperisfine · Pull Request #49612 · rails/rails
captureビューヘルパーと、HAMLやSlimとの互換性を修正。HAMLやSlim(他のテンプレートエンジンでも起きる可能性あり)で空文字列
""がcaptureされるとバッファ全体が返される問題を修正。Jean Boussier
同CHANGELOGより
参考: 週刊Railsウォッチ20231024: captureビューヘルパーがHAMLやSlimで空文字列""をキャプチャしたときの振る舞いを修正
🔗 Action Pack
🔗 Preload Selenium driver_path before parallelizing system tests by mattbrictson · Pull Request #49908 · rails/rails
システムテストをパラレルで実行すると
Text file busy - chromedriverエラーが発生する可能性のある競合状態を修正。Matt Brictson
同CHANGELOGより
🔗 Fix StrongParameters#extract_value to include blank values by fatkodima · Pull Request #49749 · rails/rails
StrongParameters#extract_valueが空の値も含められるよう修正。さもないと、コンポーネントの1つが空文字列
""の場合に複合パラメータを正しくパースできなくなる可能性がある。fatkodima, Yasha Krasnou, Matthias Eiglsperger
同CHANGELOGより
参考: 週刊Railsウォッチ20231107: レコードの第2主キー以降が空文字列""の場合にurl_helpersが無効なURLを生成する問題を修正
🔗 Add racc dependency because it will be bundled by skipkayhil · Pull Request #49722 · rails/rails
raccgem(LALR(1)パーサージェネレータ)を依存性に追加(Ruby 3.4.0からはbundled gemとなる予定)。Hartley McGuire
同CHANGELOGより
🔗 Support handling Enumerator for non-buffered responses by zzak · Pull Request #49616 · rails/rails
バッファされていないレスポンスでEnumeratorを扱えるよう修正。
Zachary Scott
同CHANGELOGより
参考: 週刊Railsウォッチ20231024: response_bodyにEnumeratorを渡すとエラーになるのを修正
🔗 Action Text
🔗 Fix using actiontext.js in sprocket by mgrunberg · Pull Request #49952 · rails/rails
ブラウザでactiontext.esm.jsとして直接利用される可能性のあるESM(ESモジュール)パッケージをコンパイルするよう修正。
Matias Grunberg
同CHANGELOGより
actiontext.jsをSprocketsで利用する場合の問題を修正。
Matias Grunberg
同CHANGELOGより
🔗 Fix using trix in sprockets by skipkayhil · Pull Request #49778 · rails/rails
Trixを2.0.7にアップグレード。
Hartley McGuire
同CHANGELOGより
TrixをSprocketsで利用する場合の問題を修正。
Hartley McGuire
同CHANGELOGより
🔗 Railties
🔗 Fix running db:system:change with no Dockerfile by skipkayhil · Pull Request #49988 · rails/rails
アプリにDockerfileがない場合に
db:system:changeを実行するとエラーになる問題を修正。Hartley McGuire
同CHANGELOGより
🔗 Do not memoize auto/eager load paths in engines by fxn · Pull Request #49636 · rails/rails
config.eager_load_paths(または類似の設定)にアクセスすると、config.pathsに対する後からの変更がオートロードパスやeager loadパスに期待通りに反映されなかった問題を修正。このバグはRails 3から潜んでいた。
修正: #49629
Xavier Noria
同CHANGELOGより
TechRachoではRubyやRailsの最新情報などの記事を平日に公開しています。TechRacho記事をいち早くお読みになりたい方はTwitterにて@techrachoのフォローをお願いします。また、タグやカテゴリごとにRSSフィードを購読することもできます(例:週刊Railsウォッチタグ)