Я запускаю приложение flask в Ubuntu 18.0, flask_sqlalchemy и базе данных MYSQL. Когда я пытаюсь войти в систему, иногда получаю 500 внутренних ошибок сервера, я должен перезапустить сервер MYSQL и Apache.

Я проверяю журнал сервера, и я нашел эту ошибку, я не мог понять это error.log

ERROR:flask.app:Exception on / [POST], referer: {domain.com}
 Traceback (most recent call last):, referer: {domain.com}
   File "/usr/local/lib/python3.6/dist-packages/pymysql/connections.py", line 583, in connect, referer: {domain.com}
     **kwargs), referer: {domain.com}
   File "/usr/lib/python3.6/socket.py", line 724, in create_connection, referer: {domain.com}
     raise err, referer: {domain.com}
   File "/usr/lib/python3.6/socket.py", line 713, in create_connection, referer: {domain.com}
     sock.connect(sa), referer: {domain.com}
ConnectionRefusedError: [Errno 111] Connection refused, referer: {domain.com}
, referer: {domain.com}
During handling of the above exception, another exception occurred:, referer: {domain.com}
, referer: {domain.com}
Traceback (most recent call last):, referer: {domain.com}
 File "/usr/local/lib/python3.6/dist-packages/sqlalchemy/engine/base.py", line 2158, in _wrap_pool_connect, referer: {domain.com}
   return fn(), referer: {domain.com}
File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1805, in full_dispatch_request, referer: {domain.com}
  rv = self.dispatch_request(), referer: {domain.com}
File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1791, in dispatch_request, referer: {domain.com}
  return self.view_functions[rule.endpoint](**req.view_args), referer: {domain.com}
File "/var/www/Dashboard/dashboard/routes.py", line 23, in login, referer: {domain.com}
  User = db.session.query(Users).filter_by(Email = request.form['Email']).first(), referer: {domain.com}
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_bcrypt import Bcrypt
from flask_login import LoginManager 

app = Flask(__name__)
app.config['SECRET_KEY'] = 'SECRET_KEY'
app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+pymysql://username:password@localhost/database"
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
bcrypt = Bcrypt(app)
login_manager = LoginManager(app)
login_manager.login_view = 'login'

from dashboard import routes
from dashboard import api
0
Ahmed K Madani 13 Дек 2019 в 19:35
Покажите, пожалуйста, код, в котором вы инициализируете базу данных.
 – 
MartinKondor
13 Дек 2019 в 20:00
Обновил, спасибо
 – 
Ahmed K Madani
13 Дек 2019 в 21:05
Вы уверены, что база данных существует?
 – 
MartinKondor
13 Дек 2019 в 21:09
Да, какое-то время он работает, но когда я возвращаюсь через пару часов, я получаю эту ошибку, я перезапускаю сервер mysql и apache снова работает
 – 
Ahmed K Madani
13 Дек 2019 в 21:22
Я все еще получаю эту ошибку ERROR:flask.app:Exception on /order [GET] Traceback (most recent call last): File "/usr/local/lib/python3.6/dist-packages/pymysql/connections.py", line 583, in connect **kwargs) File "/usr/lib/python3.6/socket.py", line 724, in create_connection sock.connect(sa) ConnectionRefusedError: [Errno 111] Connection refused
 – 
Ahmed K Madani
15 Дек 2019 в 08:26

2 ответа

Мне не хватало памяти, что приводит к сбою сервера MySQL при каждом выполнении запроса POST или GET.

Я использовал Ubuntu DigitalOcean для хранения капель 25 ГБ с 1 ГБ ОЗУ, с сервером APACHE и сервером MYSQL.

Что я сделал, так это запустил MySQL-сервер в автономном режиме и удаленно подключил колбу, и она работает очень стабильно.

Благодарность,

1
Ahmed K Madani 6 Янв 2020 в 07:56

Подключитесь к вашей базе данных с помощью сокета:

socket_location = "/var/run/mysqld/mysqld.sock"
app.config['SQLALCHEMY_DATABASE_URI'] = \
    "mysql+pymysql://username:password@localhost/database?unix_socket=" + socket_location

Чтобы найти правильное расположение вашего сокета, попробуйте найти его в файле конфигурации базы данных, например, в /etc/mysql/my.cnf .

Перед использованием базы данных убедитесь, что она существует:

db = SQLAlchemy(app)

with app.app_context():
    db.create_all()

# ...
app.run(...)
-1
MartinKondor 13 Дек 2019 в 21:23