背景
railsアプリのdatabase接続設定でDBアダプタがsqlite3
とpostgresql
の場合はprepare statement
設定はデフォルトで有効になっているが、mysql2
の場合は無効になっていた。
対応
DBアダプタ間で設定に一貫性を保つ為にmysql2
もprepare statement
設定がデフォルトで有効になる。
breaking changeになるのでデフォルト値が実際に有効になるのは2世代先の7.2からで、時期バージョンの7.1ではmysql
を使用する場合に以下のDEPRECATION WARNING
が表示されるようになります。
ActiveSupport::DeprecationException:
DEPRECATION WARNING: The default value of `prepared_statements` for the mysql2 adapter will be changed from +false+ to +true+ in Rails 7.2.
#
DEPRECATION WARNING
を表示させない
DEPRECATION WARNING
の出力処理はprepared_statements
のprepared_statements
がdatabase.yml
で指定されていない場合にフレームワークでデフォルト値を参照する際に出力されています。
そのため、以下のようにdatabase.yml
内で値を設定することでDEPRECATION WARNING
の出力を止めることが可能です。
これまでの振る舞い通りprepared_statements
を無効化したい場合
config/database.yml
default:
adapter: mysql2
+ prepared_statements: false
rails7.2以降のデフォルトに合わせてprepared_statements
を有効化したい場合
※ rails7.2以降ではprepared_statements
のデフォルト値がture
に変更されるため値の指定は不要になります。
config/database.yml
default:
adapter: mysql2
prepared_statements: true
プリペアドステートメントについて