LoginSignup
0
1

rails7.2からMySQLでprepared statemenがデフォルトで有効になる

Posted at

背景

railsアプリのdatabase接続設定でDBアダプタがsqlite3postgresqlの場合はprepare statement設定はデフォルトで有効になっているが、mysql2の場合は無効になっていた。

対応

DBアダプタ間で設定に一貫性を保つ為にmysql2prepare 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_statementsprepared_statementsdatabase.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

プリペアドステートメントについて

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1