我在我的python应用程序中使用uwsgi。我是uwsgi的新手。当我想在后台运行uwsgi时,请执行以下操作:
uwsgi --http 127.0.0.1:1088 --wsgi-file app.py --callable app --master --processes 1 --workers 1 --threads 1 --daemonize=logs.txt
然后过了一段时间(例如10分钟)之后,当我尝试在我的在线网站上登录我的测试帐户时,我总是得到500 internal error
。在logs.txt文件中,我发现此异常:
OperationalError("(_mysql_exceptions.OperationalError) (2006, 'MySQL server has gone away')")
或有时这个
StatementError("(sqlalchemy.exc.InvalidRequestError) Can't reconnect until invalid transaction is rolled back",)
我做了什么:
我发现--lazy-apps
或--lazy
应该解决问题,但没有解决。这是我的习惯lazy-apps
uwsgi --http 127.0.0.1:1065 --wsgi-file app.py --callable app --master --lazy-apps --processes 1 --workers 1 --threads 1 --daemonize=logs.txt
然后我尝试将其设置POOL_RECYCLE
为小于5m(但仍然会出现问题):
app.config['SQLALCHEMY_POOL_RECYCLE'] = 285
我读到应该禁用池化功能,NullPool
但老实说我不知道该怎么做。这里的链接是配置键的列表,但没有SQLALCHEMY_POOLCLASS
下面是我的代码。我该如何解决我的问题?谢谢
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://brrr:brrr@localhost/grrr'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=False
app.config['SQLALCHEMY_POOL_RECYCLE'] = 285
db = SQLAlchemy(app)
bcrypt = Bcrypt(app)
from models import *
app.secret_key = 'super secret key'
login_manager = LoginManager()
login_manager.init_app(app)
from models import *
login_manager.login_view = "login"
@login_manager.user_loader
def load_user(user_id):
return User.query.filter(User.id == int(user_id)).first()
@app.route('/')
def index():
return render_template('index.html')
@app.route('/success')
def success():
return render_template('success.html')
@app.route('/login', methods=['GET','POST'])
def login():
error = None
if request.method == 'POST':
user = ser.query.filter_by(username=request.form['username']).first()
if user is not None:
user_pass = request.form['password']
if bcrypt.check_password_hash(user.password, user_pass):
login_user(user)
return redirect(url_for('success'))
else:
error = 'error'
else:
error = 'error'
return render_template('login.html', error=error)
@app.route('/signup', methods=['GET','POST'])
def signup():
user_name_error = None
email_error = None
if request.method == 'POST':
user = User(
username=request.form['username'],
password=request.form['password']
)
db.session.add(user)
db.session.commit()
login_user(user)
return redirect(url_for('success'))
return render_template('signup.html')
@app.route('/logout')
def logout():
logout_user()
return redirect(url_for('index'))
if __name__ == '__main__':
app.run()
我做了同样的事情,就像PizzaPleb
这里链接一样,所以我像这样重新初始化我的数据库
db.init_app(app)
我贴在这里
...
from models import *
login_manager.login_view = "login"
**db.init_app(app)**
...
我摆脱了那个例外。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句