Я обнаружил тупик на расширении sqlite3 ruby и исправил его здесь: попробуйте и посмотрите, исправит ли это вашу проблему.
https://github.com/dxj19831029/sqlite3-ruby
Я открыл запрос на получение ответа, ответа от них больше нет.
Во всяком случае, ожидается некоторое занятое исключение, как описано в самом sqlite3.
Имейте в виду с этим условием: sqlite занят
The presence of a busy handler does not guarantee that it will be invoked when there is
lock contention. If SQLite determines that invoking the busy handler could result in a
deadlock, it will go ahead and return SQLITE_BUSY or SQLITE_IOERR_BLOCKED instead of
invoking the busy handler. Consider a scenario where one process is holding a read lock
that it is trying to promote to a reserved lock and a second process is holding a reserved
lock that it is trying to promote to an exclusive lock. The first process cannot proceed
because it is blocked by the second and the second process cannot proceed because it is
blocked by the first. If both processes invoke the busy handlers, neither will make any
progress. Therefore, SQLite returns SQLITE_BUSY for the first process, hoping that this
will induce the first process to release its read lock and allow the second process to
proceed.
Если вы соответствуете этому условию, тайм-аут больше не действителен. Чтобы избежать этого, не помещайте select внутри begin / commit. или используйте эксклюзивную блокировку для начала / фиксации.
Надеюсь, это поможет. :)