Redux(react-redux)における適切な配列要素の更新
2021年8月23日…
※sequelize-cli v4.0.0, sequelize v4.37.6での出来事です。
sequelize-cliに慣れておらず、色々と模索しながらいじっていた。おそらく、最初からではなく途中からだと思われるが、いつしかsequelize-cliにてモデルを作成してから、sequelize db:migrate
を実行するとERROR: null value in column "createdAt" violates not-null constraint
と実行時に必ず出てしまい、マイグレーションがうまくいかなくなってしまった。
解決策は見出しの通りで、そのままである。SequelizeMetaとSequelizeMetaBackupテーブルを削除することで、特にモデルに変更は加えていないが、マイグレーション時にERROR: null value in column "createdAt" violates not-null constraint
のエラーが出ることは一切なくなった。
結局のところ、解決策が調べても分からなかったので、DBをドロップするか…と、その前に明らかにsequelize-cliが管理用に使ってそうなテーブル2つを削除してみるかーとやってみたら、たまたまやってみたら現象が解消した。
こうなった理由として、そもそも自分のRails力(?)が足りなかったのか(※SequelizeはRailsのDB環境を目指しているものと思ってる)、なんなのかは分からないが、sequelize-cliでDBマイグレーションに慣れておらず、テーブルの作成をやり直すのにsequelize db:migrate:undo
を実行せずに、手動でテーブルを消したり、sequelize-cliを中途半端に使っていた。
こういったマイグレーションツールは、基本的にはDB操作のラッパーとなるコマンドが用意されているものなら、そこに乗っかりきるのが大切なようだ。そのルートから逸脱すると、このようなよく分からないエラーに見舞われることもある(Rails力が高い人は、この手の常識を心得ており、はなから余裕で乗り切ると信じている)。
sequelize db:seeds
を実行した際にも同様のエラーに遭遇した。この場合はsequelize-cliの仕様なのか、バグなのか不明だが(たぶんバグ)、createdAtとupdatedAtカラムは、通常sequelize側で自動的に値が書き込まれるが、sequelize-cliではなぜか書き込まれない。その場合、対象のseedファイルにて、下記のようにcreatedAtとupdatedAtカラムに明示的に時刻を入れてやればよい。
up: (queryInterface, Sequelize) => { return queryInterface.bulkInsert('members', [{ first_name: 'Masaki', last_name: 'Miyauchi', email: '[email protected]', password: 'xxxyyyzzz', createdAt: new Date(), updatedAt: new Date(), }], {}); },
トピック的にずれるが、sequelize deprecated String based operators are now deprecated. Please use Symbol based operators for better security, read more at http://docs.sequelizejs.com/manual/tutorial/querying.html#operators node_modules/sequelize/lib/sequelize.js:242:13
という警告がsequelize-cliのマイグレーション時に出るが、これはsequelize-cliの内部処理でsequelizeを使っていて、sequelizeの警告がたまたま出ているものと思われる。マイグレーション対象のモデルの書式を見直しても、おかしな箇所はなかった。
プログラムを書きながらTranceを聴くのが良いですね。みなさんも聴いたほうがいいですよ、Trance。EDMよりハードトランスでしょ。
Discussion about this post