herokuではSQLiteは使えないらしい
SQLite on Heroku
上の記事の抜粋
・SQLiteは簡単に使用できるが、本番環境用のデータベースとしては意図されていない。
・SQLiteはメモリ内で実行され、ディスク上のファイルにバックアップする。この戦略は開発に適しているが、HerokuのCedarスタックには一時的なファイルシステムがあり、書き込みも読み取りもできますが、内容は定期的にクリアされる。HerokuでSQLiteを使用すると、少なくとも24時間に1回はデータベース全体が失われる。
・Herokuのディスクが永続的であったとしても、SQLiteを実行することはできない。SQLiteはサービスとして実行されないため、各dynoは個別に実行中のコピーを実行する。アプリに電力を供給するdynoごとに異なるデータセットが存在することになる。
HerokuではSQLite3が使えない?!
Webアプリ開発未経験者がFlaskとSQLiteとHerokuを使って1週間でサービス公開までする
じゃあ今作っているアプリはどうすれば良いの??を考えた
-
SQLiteをpostgreSQLに移行する
-
デプロイ先をherokuから別の場所に変更する(AWSとかGCPとか)
-
SQLiteからPostgreSQLへの移行についてのリサーチ
####疑問:
もともとsqlalchemyを使っていたが、ただ接続先をSQLiteからpostgreSQLに変更するだけで大丈夫なのか?
→Django + SQLAlchemy + SQLite3 / PostgreSQLでWebアプリを作成する
この記事を読む感じ、接続方法は微妙に違うもののその他は行けそう?というかそれこそが、ORMというものなのか?
Python3 の 定番ORM 「 SQLAlchemy 」で MySQL ・ SQLite 等を操作 – 導入からサンプルコード
とりあえずやってみた
sqlalchemyを使用してpythonでDBアクセスをする
pip install psycopg2
→エラーが出た
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
pip install時の「“python setup.py egg_info” failed ...」エラー
上を参考にエラーを解消していく
$ pip install --upgrade pip setuptools
→変わらずエラー
→必要なライブラリが無いことが原因と判明。記事にしたがって、postgresqlをインストールする。(Mac OS)
brew install postgresql
入ったかどうか確認
psql --version
(出力)psql (PostgreSQL) 12.2
入ってた。
もう一回やってみる
pip install psycopg2
→できた。
Flask-SQLAlchemy + PostgreSQLでWebサービスを作成する
もともとSQLiteでやっていたDB設定のところで名前のところを.sqliteから.postgresqlに変えてみた。
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
こんなエラーが出て、PostgreSQLを起動できなかった。
postgres -D /usr/local/var/postgres
をやっておかないと無理っぽい??
app.config['SQLALCHEMY_DATABASE_URI'] = "postgresql://localhost/DB名"
で動作を確認する。
PostgreSQLの基本的なコマンド
コマンドでちゃんと中身が反映されているかも確認
###ローカルで動作確認できたので、herokuの設定を進めていく。
Heroku Postgres を利用してみよう
- Add-ons(Heroku Postgres)を追加する。
- setting→Config VariablesでDB URLを確認する。