Heroku上でFlaskを動かしたい
諸事情があって、Webアプリケーションを作ることに。
どうせなら、ちょっとは慣れているFlaskで作りたい。
でも、訳あって自分のサーバは使いたくないし、一時的なものだし…
ということで、Heroku上でFlaskを動かしたい。
アカウントの取得とToolbeltのインストール
Herokuのトップページに行き、アカウントを作成する。
メールアドレスをいれるだけ。簡単。
そして、ここからHeroku Toolbeltのパッケージをダウンロードして、インストール。簡単。
こうすることで、herokuコマンドが使えるようになる。
環境設定
作業ディレクトリをheroku_testとする。
virtualenvで環境をつくる。
そして、pipでflask、gunicorn、psycopg2、flask-sqlalchemyをインストール。
gunicornはデプロイ用。不要なら不要。
Herokuは無料でPostgresqlが使えるので、アダプタとしてpsycopg2。
ORMとして、flask-sqlalchemy。不要なら不要。
インストールが終わったら、必要なモジュールをrequirements.txtに書き出しておく。
こうすることで、Herokuにデプロイしたときに自動でインストールしてくれる。
$ mkdir heroku_test $ cd heroku_test $ mkvirtualenv env-heroku $ workon env-heroku $ pip install flask, gunicorn, psycopg2, flask-sqlalchemy $ pip freeze > requirements.txt
HerokuログインとGitリポジトリ
Herokuにログインする。そのときに、登録したメールアドレスとパスワードを入力する。
公開鍵を自動で見つけてくれる。
複数の公開鍵がある場合は、どれを使うか選択できる。
Authentication successfulって出たら成功。
$ heroku login Enter your Heroku credentials. Email: hogehoge@hoge.com Password (typing will be hidden): 〜略〜 Authentication successful.
次に、作業ディレクトリにgitリポジトリを作る。
$ git init
$ git add .
$ git commit -m "first commit"
そして、heroku上にアプリケーションを作成する。
ここでは、o-tomox-appにする。
$ heroku create o-tomox-app Creating o-tomox-app... done, stack is cedar http://o-tomox-app.herokuapp.com/ | git@heroku.com:o-tomox-app.git
これで、アプリケーションがhttp://o-tomox-app.herokuapp.comにできる。
現段階だと、こんな感じ?
DBの設定
HerokuはPostgresqlが無料で使えるので、使えるものは使う。
「heroku addons:add shared-database」とか「heroku addons:add heroku-postgresql:dev」とか色々書かれてるサイトがあったけど、以下の方法でできた。
$ heroku addons:add heroku-postgresql Adding heroku-postgresql on stormy-shore-4296... done, v4 (free) Attached as HEROKU_POSTGRESQL_AQUA_URL Database has been created and is available ! This database is empty. If upgrading, you can transfer ! data from another database with pgbackups:restore. Use `heroku addons:docs heroku-postgresql` to view documentation.
Procfileとmain.py
アプリケーションの実行コマンドをProcfileに書いておく。
gunicornを使うならこんな感じ。
これをProcfileという名前のファイルを作って書く。
web: gunicorn main:app -w 4
次に、適当にmain.pyを作ってみる。
from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World!" if __name__ == "__main__": app.run()
せっかく、flask-sqlalchemyとかインストールしたけど、使わないという。
デプロイ
一応、これでpushすればいける。
$ ls
Procfile main.py requirements.txt
$ git add .
$ git commit -m "minimum app"
$ git push heroku master
http://o-tomox-app.herokuapp.com/にアクセスしてみると、こんな感じ。
herokuって何やって言われたら、remoteリポジトリがherokuとして登録されていないので、git remote addで、登録する。
例えば、こんな感じ
git remote add heroku git@heroku.com:o-tomox-app.git
こんな感じでいいか。