この記事の続きです。
https://qiita.com/shota0701nemoto/items/06a88f9cd65a716098fe
##したいこと
Docker内でマイグレーションする際マイグレーションファイルにエラーがあったため、特定のマイグレーションファイルのみ先にマイグレーションしたい。
#####現状
Docker内で作成したデータベースでマイグレーションファイルの順番に間違いがあり、マイグレーションができない状態です。
#####原因・理由
・migration時に外部キー元のテーブルがないため。
※既存のrailsアプリにDockerを導入しようとしているため、一度にマイグレーションをせざるをえない状況になっています。
##行ったこと、調べたこと
ターミナルでdocker-compose run web bin/rake db:migrateを実行したところ次のエラーが表示される。
PG::UndefinedTable: ERROR: relation "gyms" does not exist
下記記事の通り、先に実行するべきマイグレーションIDを指定してマイグレーションを実行する必要がある。
https://qiita.com/hrnEaSwzbOLaWj6/items/a23db1e630bafb18fe27
PG::UndefinedTable: ERROR: relation "gyms" does not exist
##解決方法
Docker内でマイグレーションされてるファイル、されてないファイルを確認。
$ docker-compose run web bin/rake db:migrate:status
Docker内で先にマイグレーションしたいファイルを指定して、マイグレーションする。
docker-compose run web bin/rake db:migrate:up VERSION=マイグレーションID
または
docker-compose run web rake db:migrate:up VERSION=マイグレーションID
Docker内なのでコマンドの先頭にdocker-compose run web
をつける必要があります。
また、特定の環境内でmigrateなどをしたい際には、
#test環境でマイグレーションファイルの状況を確認
docker-compose run web bin/rake db:migrate:status RAILS_ENV=test
#test環境でマイグレーションファイルを指定して確認。
docker-compose run web bin/rake db:migrate:up VERSION=20200316144757 RAILS_ENV=test