heroku run rails db:migrate ができないエラーの解消方法


【概要】

1.結論

2.なぜ起きるのか

3.どのように解決するのか

4.ここから学んだこと

1.結論

migrateファイルを整理する!

2.なぜ起きるのか

migrateファイルが噛み合っていなかったことが原因でした。実は、% rails db:rollbackをする前に、
upしているファイルのカラム名を変更してしまいました。

上記の画像では全て"up"になっていますが、この状態でカラム名を変更するための操作をしてしまいました。
具体的には % rails generate migration rename_”変更前カラム名”column_to”モデル名” です。AddやDropもしておりました。

ターミナル
% heroku run rails db:migrate 

上を実行した際に文字や数字の中にとある一文がありまして”migrateファイルのorders(私が作ったmigrateファイル名です)がないよ”とも言われましたし、

ターミナル
% rails db:migrate

上を実行した際にもordersに+αで”このカラム名がないよ”ということを言われました。


3.どのように解決するのか

ただやることは明確で、migrateファイルの食違いをなくすために整理しました。

今回はとにかく早くエラーを解消したかったために、画像を用意し忘れました。

この時は必ず削除が発生する (=migrateファイルの削除ですが結果的にはDBをいじることになる)ので% rails db:rollback を必ず行いました。
(rollbackするとDBのテーブルの中身は消えますが開発段階では特に問題はないと思います。)

% rails db:migrate:statusでも"down"してることを確認しました。
自分は該当テーブルのカラム名のRenameやAdd、テーブルのDropを行っていたので順を追って何が必要で何が消しても問題ないかを慎重に行いながら整理しました。
% rails db:migrate を行うとうまく機能したのでherokuでも試してみるとうまく行きました。


4.ここから学んだこと(エラーの時に使用)

今思い返してみるとrollbackせずに、勝手にDB上でテーブルを削除したり、ロールバックしているけど違うファイルでカラム名を追加したりいろんなことたくさんやっていました。その時にmigrateしてもなぜかエラーが出るので勝手に削除等を行ってうまくいってしまってたので、ツケが回って1日も費やす形になってしまいました。

実は自分がこの記事を書いたエラー(git push heroku masterする際のエラー解消方法)の前に起きたことだったので、migrateファイルを改善したのになぜherokuのmasterにpushできないのかと焦っていました。migrateファイルやDB関係は特に注意して扱わないと修正が本当に大変になることを実感しました。またrollbackする際は% rails db:rollback STEP="数字"をすることでupの箇所から上方向”数字”番目までロールバックしてくれます。手間とミスを省ける記述です。