Kuzunoha-NEのブログ

プログラミングなどの勉強をしてます

FlaskチュートリアルでFlask-Migrateを実施 + flaskrをuwsgiで配信する方法

FlaskチュートリアルでFlask-Migrateを実施 + flaskrをuwsgiで配信する方法

こんにちは、葛の葉です。「くずのは」って読むんですよ。よろしくお願いします。

さて、今回は、Flaskチュートリアルflaskrを見ながらアプリケーションを作っていたのですが、そのうち、Flask-Migrateっていうのを使って、マイグレーションを行おうと思いました。

2. Flaskチュートリアル — study flask 1 ドキュメント

ここの項目を見ればわかるのですが、

$ python
>>> from flaskr.models import init
>>> init()

このようなコマンドを打たないと、DBとPythonが連携されないようです。都度、pythonを起動して行うのは面倒なので、Flask-Migrateを使うことにします。


Flask-Migrateを使う

モジュールのインストールの実施

pip install Flask-Migrate

flaskr/__init__.pyを以下のように編集

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

app = Flask(__name__)
app.config.from_object('flaskr.config')

db = SQLAlchemy(app)

migrate = Migrate(app, db)

import flaskr.views

ちなみに2行目なんだけど、

from flask.ext.sqlalchemy import SQLAlchemyではなくて

from flask_sqlalchemy import SQLAlchemyになります。

flask.ext.sqlalchemyというのが廃止されたみたいです。

チュートリアルでは古い情報が残ったままみたいです。

そうして、manage.pyがおいてあるディレクトリをカレントディレクトリにした状態(つまりtutorialディレクトリ)で以下のコマンドを実施。

FLASK_APP=manage.py flask db init
FLASK_APP=manage.py flask db migrate
FLASK_APP=manage.py flask db upgrade

そうすると、migrationsディレクトリが作成され、マイグレーションが完了します。

このmigrationsディレクトリってやつが残っているとFLASK_APP=manage.py flask db initが失敗するようなので、やり直したいときは都度削除してください。

ただ、権限がないと削除できないのでsudo rm -rf migrations/みたいな感じで削除してあげてください。


uwsgiで配信する方法

Flask-Migrateとは関係ないですが、こちらも少し手こずったので共有します。

uwsgiについては、以下のリンクをどうぞ。

The uWSGI project — uWSGI 2.0 documentation

pipでのインストールは以下のコマンドになります。

pip install uwsgi

uwsgi.iniといった名前で、以下のテキストファイルを作ります。

[uwsgi]
http = :3031
chdir = /***/tutorial #manage.pyのおいてあるディレクトリ
wsgi-file = manage.py #manage.pyのやつ
module = flaskr #flaskrディレクトリ
callable = app #flaskのappを呼び込むため必要
chmod-socket = 666
master = true

以上のようにwsgi-filemanage.pyに設定。

chdirをmanage.pyがおいてあるディレクトリに設定。

そして、moduleflaskrに設定することが必要のようです。

次に以下のようなコマンドを打ちます。

uwsgi --init /***/uwsgi.ini

これでuwsgiが起動し、127.0.0.1:3031でwebページが見れるようになるはずです。

ついでに、Nginxと連携したいのなら、以下の記事なんかも見てもらえたらなーって思います。

kuzunoha-ne.hateblo.jp