ohld / django-telegram-bot

My sexy Django + python-telegram-bot + Celery + Redis + Postgres + Dokku + GitHub Actions template
https://t.me/ffmemesbot
Apache License 2.0
682 stars 170 forks source link

Bot fails on /start #16

Closed Bercof closed 3 years ago

Bercof commented 3 years ago

Hi, I've got an error with starting TG Bot: FOREIGN KEY constraint failed. Tried on local env with SQLite and docker-compose file. Both ways have the same result.

Steps to reproduce:

  1. clone repo
  2. create new TG Bot
  3. create .env file as described at wiki
  4. start docker-compose
  5. open TG and /start with my bot
  6. -> nothing happen in TG, but there is described error at logs

Possible root cause: Looks like handler_logging decorator is executed ahead creating user at command_start

@handler_logging()
def command_start(update, context):
    u, created = User.get_user_and_created(update, context)

Here is an error trace:

Traceback (most recent call last):
  File ".../django-telegram-bot/venv/lib/python3.8/site-packages/telegram/ext/dispatcher.py", line 442, in process_update
    handler.handle_update(update, self, check, context)
  File ".../django-telegram-bot/venv/lib/python3.8/site-packages/telegram/ext/handler.py", line 160, in handle_update
    return self.callback(update, context)
  File "/home/dmitrii/storage/documents/devel/external/django-telegram-bot/tgbot/handlers/utils.py", line 26, in handler
    UserActionLog.objects.create(user_id=user_id, action=action, created_at=timezone.now())
  File ".../django-telegram-bot/venv/lib/python3.8/site-packages/django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File ".../django-telegram-bot/venv/lib/python3.8/site-packages/django/db/models/query.py", line 447, in create
    obj.save(force_insert=True, using=self.db)
  File ".../django-telegram-bot/venv/lib/python3.8/site-packages/django/db/models/base.py", line 753, in save
    self.save_base(using=using, force_insert=force_insert,
  File ".../django-telegram-bot/venv/lib/python3.8/site-packages/django/db/models/base.py", line 790, in save_base
    updated = self._save_table(
  File ".../django-telegram-bot/venv/lib/python3.8/site-packages/django/db/models/base.py", line 895, in _save_table
    results = self._do_insert(cls._base_manager, using, fields, returning_fields, raw)
  File ".../django-telegram-bot/venv/lib/python3.8/site-packages/django/db/models/base.py", line 933, in _do_insert
    return manager._insert(
  File ".../django-telegram-bot/venv/lib/python3.8/site-packages/django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File ".../django-telegram-bot/venv/lib/python3.8/site-packages/django/db/models/query.py", line 1254, in _insert
    return query.get_compiler(using=using).execute_sql(returning_fields)
  File ".../django-telegram-bot/venv/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1397, in execute_sql
    cursor.execute(sql, params)
  File ".../django-telegram-bot/venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 98, in execute
    return super().execute(sql, params)
  File ".../django-telegram-bot/venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 66, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File ".../django-telegram-bot/venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 75, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File ".../django-telegram-bot/venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File ".../django-telegram-bot/venv/lib/python3.8/site-packages/django/db/utils.py", line 90, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File ".../django-telegram-bot/venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File ".../django-telegram-bot/venv/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py", line 413, in execute
    return Database.Cursor.execute(self, query, params)
django.db.utils.IntegrityError: FOREIGN KEY constraint failed
shamaevnn commented 3 years ago

@Bercof, thank you for your report! Executing handler_logging decorator before handler was the reason of the problem.