0
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?

[学習メモ] Herokuのデータベースのカラムを追加(migreation)

0
Posted at

Herokuのデータベースにカラムを追加しようとしたらエラーになった原因

原因1.環境変数の設定をしていない

Herokuのデータベースをアップグレードしようとしたら、以下のエラーが出ました。
これは「Flaskアプリケーションが見つからない」と出ています。
エラー.png

flask db upgradeコマンドを実行した際に、接続情報などを取得する必要があります。それらはFlaskアプリケーションの設定から取得します。

flask db upgrade を実行

FLASK_APP環境変数を確認

myapp:app を読み込む

Flaskアプリケーションを起動

app.config['SQLALCHEMY_DATABASE_URI'] を取得

データベースに接続

マイグレーション実行

原因2.Herokuへ最初にデプロイした際にマイグレーションをしていない

ローカルではデータベースを更新するたびにマイグレーションファイルを作成していたが、Herokuでは一度もマイグレーションしていなかったのでマイグレーション履歴とHerokuのデータベース履歴が一致しておらずエラーになった。
Herokuではalembic_versionテーブルでマイグレーション履歴を記録します。

・最初のデプロイ時にdb.create_all()コマンドでテーブルを作成したので、マイグレーションを使っておらずマイグレーション履歴が記録されていない

・Flask-Migreateは「まだ何もマイグレーションしていない」と判断し、すべてのマイグレーションを最初から実行しようとする

・CREATE TABLE booksを実行し、すでに存在するためエラーになる

Herokuの環境変数設定

flask runコマンドを実行する際、環境変数FLASK_APPにアプリケーション名を設定する必要がある

コマンド
heroku config:set FLASK_APP=myapp:app

環境変数の設定を確認

コマンド
heroku config

上記のコマンドを打つとターミナルには以下のように環境変数の設定が表示されます。
image.png

マイグレーションを修正

今回はデータベースにnotify_read_completedカラムを追加したい。そのためのマイグレーションファイルがあるか確認します。

  • migration > versions > ff13a06d7588(add notify_read_completedが書かれたファイル名)

1. 一つ前にスタンプ

コマンド
heroku run flask db stamp b848a7faacf5

2. 最新のマイグレーションを適用

コマンド
heroku run flask db upgrade

3. 確認

コマンド
heroku run flask db current

2026-02-15 143133.png

headが最新のマイグレーションファイルを指していることが確認できます。
テーブルの中身もちゃんと追加されているか、コマンドで確認します。

コマンド
heroku pg:psql
\d users

今回はusersテーブルにnotify_read_completedカラムを追加しています。

データベース.png

学んだこと

今回Herokuのデータベースをdb.create_all()で作成したため、マイグレーションの履歴が残らずテーブル構造の変更履歴が追跡できない状態になっていました。そのためflask db upgradeコマンドを実行した際に一からテーブルを作成しようとしてエラーになりました。
本番環境でデータベースを作成する際は、マイグレーションを使用して変更管理をする重要性を学びました。
また、ローカルでも環境変数を設定したように、本番環境でも環境変数の設定が必要なことを学びました。

0
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
0
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?