Поиск источника ошибки PyMySQL - err.InterfaceError ("(0, '')") - PullRequest
1 голос
/ 27 мая 2019

Я разработчик бота Discord, и недавно выполнил заказ.У клиента при настройке приложения на его сервере изначально не было проблем, но, по его словам, после запуска «около трех часов» программа начинает выплевывать конкретную ошибку трассировки стека и больше не принимает команды.

Ботпостроен с использованием Discord.py и использует Peewee в качестве ORM, используя PyMySQL в качестве драйвера базы данных.Сервер, на котором работает клиент, размещается в DigitalOcean, и, если требуется какая-либо информация об оборудовании и т. Д., Клиент может предоставить мне эту информацию по запросу.Мы уже пытались удалить и переустановить все зависимости, а также пробовать их разное распределение, но ошибки сохраняются.

Это точный след, который получает клиент:

  File "/usr/local/lib/python3.6/dist-packages/peewee.py", line 2666, in __exit__
    reraise(new_type, new_type(*exc_args), traceback)
  File "/usr/local/lib/python3.6/dist-packages/peewee.py", line 179, in reraise
    raise value.with_traceback(tb)
  File "/usr/local/lib/python3.6/dist-packages/peewee.py", line 2875, in execute_sql
    cursor.execute(sql, params or ())
  File "/usr/local/lib/python3.6/dist-packages/pymysql/cursors.py", line 170, in execute
    result = self._query(query)
  File "/usr/local/lib/python3.6/dist-packages/pymysql/cursors.py", line 328, in _query
    conn.query(q)
  File "/usr/local/lib/python3.6/dist-packages/pymysql/connections.py", line 516, in query
    self._execute_command(COMMAND.COM_QUERY, sql)
  File "/usr/local/lib/python3.6/dist-packages/pymysql/connections.py", line 750, in _execute_command
    raise err.InterfaceError("(0, '')")
peewee.InterfaceError: (0, '')

Соответствующие части из моего файла database.py, где открыто соединение с базой данных:

import discord
from peewee import *

from config import db_host, db_port, mysql_db_name, \
    mysql_db_username, mysql_db_password

db_connection = MySQLDatabase(
    mysql_db_name,
    user = mysql_db_username,
    password = mysql_db_password,
    host = db_host,
    port = db_port
)

def create_db_tables():
    # create_tables() does safe creation by default, and will simply not create
    # table if it already exists
    db_connection.create_tables([User])

Соответствующие части из моего файла bot.py, в частности, функция запуска бота, которая запускается при первом открытии бота,и строки, которые создают и запускают клиент бота:

client = discord.Client()

async def bot_startup():
    # Check for config changes
    if client.user.name != config.bot_username:
        print("Username Updated To: {}".format(config.bot_username))
        await client.edit_profile(username=config.bot_username)

    # Start 'playing' message
    await client.change_presence(
        game=discord.Game( name=config.playing_message )
    )

    # Prepare database
    database.create_db_tables()
    print("Database Connected")

    print("Connected Successfully")

# ...

@client.event
async def on_ready():
    await bot_startup()

# ...

client.run(config.token)

По словам клиента, перезапуск бота временно решает проблему, и он работает нормально в течение нескольких часов, прежде чем ошибки снова запустятся.Бот больше не реагирует на любые входящие команды после того, как ошибки начинаются, и, если выдается достаточно ошибок, происходит полный сбой.

Что обычно является причиной этой ошибки, и какие действия необходимо предпринять, чтобы исправить то, что вызываетэто?

...