動かざることバグの如し

近づきたいよ 君の理想に

RailsでMySQLのストレージエンジンを指定する方法

環境

やりたいこと

RailsMySQLMyISAMを使いたい。が、指定しないとInnoDBになってしまう。RailsだとマイグレーションスキーマのCreate tableに毎回書かなきゃいけなくて面倒。

かといってMySQL側でデフォルトでセットしようにも

[mysqld]
default-storage-engine = MyISAM

みたいにMySQL全体の設定しかないため、データベースごとに個別の設定ができない。

これをなんとかしたい(

解決策

対症療法感あるが、database.ymlに書く。

development:
  <<: *default
  database: hoeghoge
  variables:
    storage_engine: MyISAM

variablesに書いた記述はMySQLが走るまえに SET key = value; のクエリと実行される。

そのため上記だと

SET storage_engine=MyISAM;

が毎回クエリの直前に実行されるので、常にMyISAMとなるってわけ