7
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

HerokuはSQLiteは使えない?

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週間でサービス公開までする

じゃあ今作っているアプリはどうすれば良いの??を考えた

  1. SQLiteをpostgreSQLに移行する
  2. デプロイ先をherokuから別の場所に変更する(AWSとかGCPとか)

1. 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 を利用してみよう

  1. Add-ons(Heroku Postgres)を追加する。
  2. setting→Config VariablesでDB URLを確認する。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
7
Help us understand the problem. What are the problem?