前提・実現したいこと
Heroku上に、ある種の測定データを時系列に受け取るアプリをFlaskで作成しています。Flask内でグローバル宣言した変数にデータを保持しようとしています。
発生している問題・エラーメッセージ
ローカル環境では問題なく動作するのですが、Herokuで動作させると、グローバル変数があたかも2個存在して、どちらかにデータが不規則に割り振られているような振る舞いをします。試しに、単なる Hello World を作ってみました。
# coding: utf-8 from flask import Flask app = Flask(__name__) print("APP STARTED!!") # ←デバッグ出力 @app.route('/') def main(): return "Hello world!" if __name__ == "__main__": app.run(debug=True, host="0.0.0.0")
すると、アプリ開始時にHerokuのログにデバッグ出力が2回出ていることを確認しました。
2021-01-20T06:38:43.078502+00:00 heroku[web.1]: State changed from starting to up 2021-01-20T06:38:43.129118+00:00 app[web.1]: APP STARTED!! 2021-01-20T06:38:43.129963+00:00 app[web.1]: APP STARTED!! 2021-01-20T06:38:50.000000+00:00 app[api]: Build succeeded
調べたこと
Herokuのドキュメントによると、ルーティング機能というものがあり、「ルーターは、ランダム選択アルゴリズムを使用して、Web dyno 間で HTTP リクエストのバランシングを行います」という記述を見つけました。Heroku側でFlaskアプリが並列に2本走っているとすれば上記の現象と辻褄が合います。
知りたいこと
Herokuではこのようなことが起こるのでしょうか?もしそうならルーティング機能を無効化する方法を知りたいです。
もし無効にできないのであれば、グローバル変数にデータを持つのではなくSQLightなどの外部データベースにデータを保存することを考えていますが、Herokuはデータファイルが保存されないという制限もあり、システム構成が複雑になってしまうことを懸念しています。
補足情報
Herokuは無償ライセンスで使用しています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/22 08:30