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_logger
gemとの互換性を修正。
semantic_logger
gemの振る舞いは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] end
Jonathan 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
racc
gem(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ウォッチタグ)