LoginSignup
0
0

More than 1 year has passed since last update.

Flaskで作ったアプリをherokuにデプロイするときにつまづいたこと

Last updated at Posted at 2022-06-04

Herokuって無料らしいじゃん?

じゃあWebアプリ作るしかないべ。

想定していたのはオンラインゲームでP2P通信をするためのIPアドレスを交換するためのWebアプリです。

おおよその実装は以下で公開しています。真似しない方が良い部分もあるので注意してください。

PostgreSQLとSQLAlchemy

Flask + Herokuで検索するとPostgreSQLSQLAlchemyの話ばかり出てくると思います。
PostgreSQLは割とメジャー(就活の利用経験の欄に出てくるレベル)なので使ってみていいと思います。
SQLAlchemyはデータベースの違いを吸収してくれるライブラリです。多分MySQL使ってもSQLite使ってもPostegre使っても全部似たような書き方になるではないでしょうか。Postgreしか使ったことないから知らんけど

PostgreSQLはherokuのAdd-onから追加しましょう。Resources→PostgreSQL→Setting→Database CredentialsからURIを取得します。そのURIをSQLAlchemyのデータベース用のURLとして使用します。

SQLAlchemyの書き方自体はシンプルです。
簡単に書くと

そーすこーど♡

DB_URI = "*"
engine = create_engine(DB_URI)

@app.route("/some_func/", methods=['POST'])
def some_func():
    SessionClass = sessionmaker(engine) # おまじない
    session = SessionClass() # おまじない

    # 何らかの変更

    session.commit() # 変更の反映
    session.close()

詳しいクエリの書き方は除きますがおおよそこんな感じです。
エンジンはアプリにつき一つ、セッションはリクエストごと一つって感じ、らしい

webアプリはまずはローカル環境で実行してPythonのHTTPクライアントを作って一つ一つテストしてみるのが良いと思います。

Heroku CLI

heroku CLIはデプロイするためのツールです。gitも同時に必要になります。そこらへんに転がってるものをインストールしましょう。

herokuへのデプロイは簡単で、herokuのDeployの欄に実行するコマンドが全て書いてあります。
ただし、そのままデプロイすると何もしないWebアプリの完成です。

heroku openしてもなんか「Congrats!」的なメッセージが出るだけです。

それは、
「どの言語のWebアプリか」の情報Buildpackと、
「どのモジュールを入れるか」の情報requirements.txtと、
「サーバーが何をすれば良いか」の情報Procfileが不足しているからです。。

Buildpack

Buildpackはheroku管理ページのSettingにあるので使ってる言語のBuildpackを入れましょう。わーい!

もちろんFlaskを使っている場合はPythonです。
次にプロジェクトのディレクトリにrequiremenets.txtを作成します(必須)
Buildpackはこのrequirements.txtをつかってモジュールのインストールをしてくれます。

中身はこんな感じ!ウキキ!
使っているモジュールのリストなので人によって増減します。

requirements.txt
Flask==1.1.1
gunicorn==20.0.4
SQLAlchemy==1.3.5
psycopg2 == 2.9.3

ちなみにherokuはgunicornを使うのでgunicornを入れる、らしい

あとはこんな感じのProcfile(必須)を作ってかんせ~~~い。ワア!

Procfile
web: gunicorn --bind 0.0.0.0:$PORT app:app

あとはDeployに書いてあるとおりにコマンドを実行していけば無事公開されると思います。

動かない時は...

heroku logsを実行するとだいたい書いてあります。requirements.txtのモジュール漏れが大半じゃないでしょうか。

code=H10 desc="App crashed"error: failed to push some refs toもだいたいheroku logsかheroku管理画面のOverview右上のview build logを参照することで解決できます。
(前者はモジュール漏れ、後者は必要なファイルが足りてない)

以上!

いやぁコマンド一つでアプリを無料デプロイできるのってすごい良いですよね。

エラーが出た時にとりあえず検索 → 試すを繰り返していたため紹介しきれなかった設定があるかもしれないですがご容赦いただきたい。多分必須知識は書いたかなと思います。

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