日々精進

新しく学んだことを書き留めていきます

Flaskで開発サーバを起動する場合はflask_script.Managerを使うといい

開発時にflaskサーバを起動する方法はいくつかある。例えば、

・Flaskサーバのデバッグ構成を作成してそれを実行する pleiades.io

・flask cli経由で起動する。つまり、flask runを実行しデバッガはpython Remote Debug構成を作ってサーバ起動後にattachする。 など。 オススメなのはflask_script.Managerを使う方法。以下のようにサーバを起動するPythonスクリプトを書いてそれを素のPythonスクリプトと同じようにデバッグ実行する。 (起動時のparameterにrunserverを指定する必要あり。)

from flask_script import Manager, Server

from my_service import create_app
from my_service  import ServiceConfig


class ApplicationManager(object):

    def __init__(self):
        app = create_app()
        config = ServiceConfig()
        app.config.from_object(config)
        manager = Manager(app)
        manager.add_command('runserver', Server(host='0.0.0.0', port='27090'))
        self._manager = manager

    def run(self):
        self._manager.run()


if __name__ == "__main__":
    app_manager = ApplicationManager()
    app_manager.run()

これにメリットは以下。 ・起動時のポート番号などの情報をコミットできる。デバッグ構成もshareオプションをチェックするとコミットできるが共有したくない項目も共有されてしまう(Python Interpreterの設定とか) ・動的に設定を変更できる。例えば個人の開発環境に依存する設定は設定ファイルから読み込んで設定するとか。