production.logスマートフォン用の表示で見るproduction.logスナップマート株式会社で取締役CTOをやっている星直史のブログです。large.と言われてしまいました。large.と言われてしまった場合の対応についてメモ程度にまとめます。原因は以下の通りです。対応は大きく2つあります。my.cnfによるMySQLの設定変更テーブルのrow_format変更my.cnfによるMySQLの設定変更my.cnfの設定まずは、my.cnfの場所を確認します。~/.my.cnfmacOSでbrewを使ってMySQLをinstallしているとコイツもいたりするので、注意が必要です。/usr/local/Cellar/mysql\@5.6/5.6.42/my.cnfmy.cnfが特定できたら以下の設定を追加します。1innodb_large_prefixオプションはインデックスの767バイト制限を3072バイトまで拡張するオプションです。このオプションを適用させるには、テーブルのrow_formatをDYNAMICもしくは、COMPRESSEDにする必要があります。TABLEを使うか、ActiveRecordのcreate_tableメソッドを書き換えてデフォルトの挙動を変更する方法の2パターンがあります。(後述します)MySQLの再起動と設定反映の確認my.cnfの設定を変更したらMySQLの再起動をしなければ設定が読み込まれません。mysqlその後、mysqlに接続し、以下の結果が得られればうまく設定されています。次にテーブルがのrow_formatを変更する必要があります。このrow_formatの変更は2つの方法があります。TABLEによる変更ActiveRecordのcreate_tableメソッドのデフォルトのrow_formatをDYNAMICに変更それぞれ説明します。TABLEによる変更まずは現在の状態を確認します。(この記事にたどり着いたということは、おそらく対象のテーブルはCompactになっているはずです。|...次に、対象のテーブル(エラーが出てしまったテーブル)のrow_formatを次のクエリで変更します。ROW_FORMAT=DYNAMIC;最後に期待の結果になっているか確認します。db:migrateを実行し、うまくいくかを確認します。large.が出てしまう問題(通称767バイト問題)の解決方法を紹介しました。これは、MySQLのmy.cnfの設定の変更と、テーブルのrow_formatの変更が必要です。TABLEで直接修正する方法もありますし、ActiveRecordのデフォルトの挙動を変更して対応することも可能です。RDSを使用しています。以前の記事でLocalStackをインストールしました。21日と、会社の開発合宿に行ってきました。はてなブログProスナップマート株式会社で取締役CTOをやっています。)GitHubGardenerhoshinaoshiスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。