Dockerで構築されたRailsをHerokuへデプロイの一部を、こちらに書いています。
ネットで調べた情報をもとにマイグレーションを行おうとしてもうまくできなく、
長時間つまずいたため同じような状態に陥った人は参考にしてみてください。
##問題点
$ heroku run rails db:migrate
を実行した時に、正常では出ない量の、文字が現れてました。
確認してみると、途中でROLLBACK
されており、
PG::UndefinedTable: ERROR: table "***" does not exist
***というテーブルが存在しないよ。というエラー文が表示されていました。
##原因
以前、テーブルを削除するマイグレーションファイルを作成した時に、元のマイグレーションファイルを削除していました。
そのため、今回テーブルを削除するマイグレーションファイルが読み込む時に、元のファイルがないのでテーブルが作成されておらず、削除するはずのテーブルが見つからないという状態でした。
##行ったこと
①元のファイルがないので、削除するはずのテーブルが作られなく、削除する指示する必要がないため、***というテーブルの削除を指示するファイルを削除し、マイグレーションを行いました。
$ heroku run rails db:migrate
②再びコンテナにプッシュ
$ heroku container:push web
①も②もこれまでと同じエラー文が出たため、マイグレーションの状態を確認しました。
すると、以下のように、削除したはずの***というファイルをマイグレーションにしようとしていました。
$ heroku run rails db:migrate:status
up 20200227071559 Create 〜
up 20200229041915 Change 〜
down 20200229044809 Drop table ***
###補足
マイグレーションファイルをrollbackせずに、削除してしまった時など、 マイグレーションのステータスに********** NO FILE **********
と出てしまうようです。
私も気付いたらdown
であった***テーブル
が********** NO FILE **********
となっていました。
そのため、以下のサイトを参考に1度dummyテーブル
を作成し対応しました。
herokuの場合、マイグレーションファイルを作成後そのままステータスを確認しても反映されていません。
そのため、私は以下の解決方法
を実行し終えた後、ステータスを確認しました。
無事、記事のように行うことができました。
【Rails】db:migrate:statusで*** NO FILE ***と出た時の対処
##解決方法
コンテナと、DBを1度リセットし、実行し直すとマイグレーションできました。
【Heroku】heroku container:push web で変更が反映されない
【Heroku】DBを1から作り直したい時にやること(rails db:reset)
$ heroku container:rm web
$ heroku pg:reset DATABASE_URL
▸ WARNING: Destructive action
▸ postgresql-fitted-20135 will lose all of its data
▸
▸ To proceed, type **** or re-run this command with --confirm ****
> ****
Resetting postgresql-fitted-20135... done
$ heroku container:push web
$ heroku container:release web
以上を行った上で、マイグレーションを実行。
$ heroku run rails db:migrate