gpt4 book ai didi

mysql - 启动应用程序一段时间后 uwsgi 出现两个 MySql 错误

转载 作者:行者123 更新时间:2023-11-28 23:42:39 34 4
gpt4 key购买 nike

我正在为我的 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 内部错误。在 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 禁用池化,但老实说我不知道​​该怎么做。这里link是配置键列表,但没有 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 相同的事情 link所以我像这样重新初始化我的数据库

db.init_app(app)

我贴在这里

...
from models import *
login_manager.login_view = "login"
**db.init_app(app)**
...

我摆脱了那个异常(exception)。

关于mysql - 启动应用程序一段时间后 uwsgi 出现两个 MySql 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34096571/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com