2016-02-26 24 views
2

燒瓶應用程序可以登錄並註冊本地主機上的所有罰款。但是當我把它推到heroku時,這成爲一個問題。它顯示了上述錯誤。這裏的app.py代碼會話不可用,因爲沒有設置密鑰。將應用程序上的secret_key設置爲獨特和祕密的內容。燒瓶/ Heroku

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() 
+2

什麼HTTP服務器是您使用? gunicorn? – joshreesjones

+0

我猜你的HTTP服務器正在加載你的應用程序,'__name__'沒有設置爲''main''。嘗試將'app.secret_key ='一些祕密密鑰'移動到if塊之外。 – joshreesjones

+1

我字面上只是有這個問題(雖然我的問題的解決方案不同於此)。 – joshreesjones

回答

4

這可能是因爲當你的HTTP服務器加載應用程序,__name__不等於'main'。嘗試移動if欄外的線app.secret_key = 'some secret key'

將您的密鑰放在源代碼中並不是一個好主意,因爲如果有人得到它,他們可能惡意地訪問您的系統。嘗試將其存儲在應用程序的實例目錄(snippet here)中的文件中,或將其存儲在環境變量(explanation here)中。

1

我使用flask-login生成會話ID時遇到了同樣的問題,當我直接運行它時它工作正常,但在使用HTTP服務器時會輸出錯誤。 原始代碼是這樣的:

if __name__ == "__main__": 
    APP.secret_key = os.urandom(24) 
    APP.run() 

然後我移動APP.secret_key = os.urandom(24)出來名稱並把它下 APP =燒瓶(名稱)所示:

APP = Flask(__name__) 
APP.secret_key = os.urandom(24) 

login_manager = flask_login.LoginManager() 
login_manager.init_app(APP) 

現在它工作正常。

1

NullSessionInterface會話實現引發異常,這是您使用Flask-Session時的默認會話類型。這是因爲你實際上沒有給SESSION_TYPE配置給Flask;將它設置爲模塊中的全局是不夠的。

這個默認值對Flask 0.10沒有多大意義;它可能對Flask 0.8或0.9有意義,但當前版本被用作錯誤信號。在你的情況下,它現在給你錯誤的錯誤信息。

將SESSION_TYPE配置選項設置爲其他值。選擇redis,memcached,文件系統或mongodb之一。

將其設置爲文件系統是最簡單的;有足夠的默認配置那裏有沒有額外的依賴項工作:

if __name__ == "__main__": 
    app.secret_key = 'super secret key' 
    app.config['SESSION_TYPE'] = 'filesystem' 

    sess.init_app(app) 

app.debug = True 
app.run() 
相關問題