Я разработчик бота 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)
По словам клиента, перезапуск бота временно решает проблему, и он работает нормально в течение нескольких часов, прежде чем ошибки снова запустятся.Бот больше не реагирует на любые входящие команды после того, как ошибки начинаются, и, если выдается достаточно ошибок, происходит полный сбой.
Что обычно является причиной этой ошибки, и какие действия необходимо предпринять, чтобы исправить то, что вызываетэто?