4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

railsのデプロイがうまくいかない時(マイグレーションファイル編)

Last updated at Posted at 2022-01-03

前提

本番環境(herokuやfly,AWSなど)とローカル環境(自分のパソコン内)ではマイグレーションが最初から行われて、別々のDBが作成されます
よって、ローカルではうまく行っている場合でも本番環境ではDBがうまく構築されないことがあります

原因はいくつか考えられますが、

  • ローカルのDBにテーブルやカラムを作った後にマイグレーションファイル削除した(本番環境のDBでは、必要なテーブルやカラムが作られていない)
  • テーブルがないのにカラムを追加しようとしている
  • 同じ名前のカラムを追加しようとしてる
  • 作成されてないテーブル、もしくはカラムを削除しようとしている
  • ファイル名とクラス名が一致していない

などが挙げられます!

マイグレーションファイルを整理する

本番環境ではマイグレーションファイルを元に1からDBが作成されます
よってマイグレーションファイルを見やすくわかりやすくしてあげる必要があります。
ポイントをまとめます!

  • 1マイグレーションファイルに1テーブル
  • テーブルとカラムは一度に作成してあげる(カラムだけを追加するマイグレーションファイルは削除する)
  • カラムやテーブルを削除するマイグレーションファイルは消す
  • 外部キーを使う場合(コメント機能や、いいね機能でアソシエーションしてる場合)は親テーブルを先に作成する。(マイグレーションファイルをリネームすれば順番を変更できます)
  • 存在しないカラムやテーブルを操作(追加や削除など)していないか

以上の観点があればマイグレーションファイルをスッキリできると思います!

ローカルでうまく動作するか確認

マイグレーションファイルを整理したら、ローカル上でちゃんとデータベースが構築されるか確認しましょう!

$ rails db:migrate:reset
$ rails db:seed #seedを使ってる場合に実行

うまくいかないでエラーになる場合があるのでその場合はこちらの記事を参考にしてください

ここでサーバーを起動し、エラーが出ないことを確認しましょう

変更したマイグレーションファイルをデプロイ(fly.ioの場合)

$ flyctl deploy

変更したマイグレーションファイルをデプロイ(herokuの場合)

$ git add -A
$ git commit -m "マイグレーションを変更"
$ git push heroku master # もしくは git push heroku main

heroku上でDBリセット、マイグレーション

$ heroku pg:reset DATABASE
#=> アプリ名の入力を求められるので入力
$ heroku run rails db:migrate
$ heroku run rails db:seed #seedを使ってる場合に実行

これでうまくいくと思います!

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?