flaskアプリはローカルホストにログインしてすべて正常に登録できます。しかし、これをherokuにプッシュすると問題になります。上記のエラーが表示されます。これが、app.pyコードです。
from flask import Flask, render_template, request, redirect, jsonify, url_for, flash
from sqlalchemy import create_engine, asc, desc
from sqlalchemy.orm import sessionmaker
from database_setup import Base, User, BlogPost
from flask import session as login_session
import random
import string
from wtforms import Form, BooleanField, TextField, PasswordField, validators
from passlib.hash import sha256_crypt
app = Flask(__name__)
#Connecting to database
engine = create_engine('sqlite:///travellerdata.db')
Base.metadata.bind = engine
DBSession = sessionmaker(bind=engine)
session = DBSession()
そして最後に...
if __name__ == "__main__":
app.secret_key = 'some secret key'
app.debug = True
app.run()
フラスコログインを使用してセッションIDを生成する場合も同じ問題が発生します。直接実行すると正常に機能しますが、HTTPサーバーを使用するとエラーが出力されます。元のコードは次のようなものです。
_if __name__ == "__main__":
app.secret_key = os.urandom(24)
app.run()
_
次に、app.secret_key = os.urandom(24)
を___name__
_から移動し、次のようにapp = Flask(__name__)
の下に配置しました。
_app = Flask(__name__)
app.secret_key = os.urandom(24)
login_manager = flask_login.LoginManager()
login_manager.init_app(app)
_
そして今は問題なく動作します。
例外は、Flask-Sessionを使用する場合のデフォルトのセッションタイプであるNullSessionInterfaceセッション実装によって発生します。これは、実際にSESSION_TYPE構成をFlaskに指定したことがないためです。モジュールでグローバルとして設定するだけでは不十分です。
このデフォルトは、Flask 0.10ではあまり意味がありません。Flask 0.8または0.9では意味があるかもしれませんが、現在のバージョンはエラーとして使用されますあなたの場合、それはあなたに今間違ったエラーメッセージを与えます。
SESSION_TYPE構成オプションを別のものに設定します。 redis、memcached、filesystem、またはmongodbのいずれかを選択します。
ファイルシステムに設定するのが最も簡単です。追加の依存関係なしで機能するのに十分なデフォルト構成があります。
if __name__ == "__main__":
app.secret_key = 'super secret key'
app.config['SESSION_TYPE'] = 'filesystem'
sess.init_app(app)
app.debug = True
app.run()