Ruby: SQLite3 :: BusyException: firebase database заблокирована:

В это сообщение об ошибке SQLite3::BusyException: database is locked: в это сообщение: SQLite3::BusyException: database is locked:

У меня две модели:

  • В подкастах много дорожек
  • Треки принадлежат подкастам.
  • Файлы подкастов размещаются в mixcloud .

Чтобы создать подкаст:

  • пользователь отправляет URL-адрес подкаста на mixcloud
  • rails app захватывает json-канал, связанный с URL-адресом
  • json используется для установки атрибутов (название, изображение и т. д.) в новом объекте Podcast

Я пытаюсь заставить приложение rails использовать тот факт, что в json feed также указаны имена (и исполнители) треков, принадлежащих этому подкасту.

Я думал, что следующий метод before_validation автоматически создаст все связанные треки, когда мы создадим новый Podcast.

 class Podcast section.track.name, :podcast_id=>self.id) end end end end 

Как я могу обойти это? Похоже, что rails (или sqlite3) мне не нравятся, создавая таким образом новые экземпляры связанной модели. Как еще я могу это сделать? Я подозреваю, что это проблема с рельсами, как sqlite3. Я могу опубликовать больше кода, если он поможет.

Для всех, кто сталкивается с этой проблемой при блокировке SQLite при разработке, когда консоль Rails открыта, попробуйте следующее:

Просто запустите следующее:

 ActiveRecord::Base.connection.execute("BEGIN TRANSACTION; END;") 

Для меня в любом случае, похоже, удаляются все транзакции, которые консоль удерживает и освобождает базу данных.

Это особенно проблема для меня при запуске delayed_job, который, кажется, не работает при закрытии транзакции довольно часто.

SQLite на самом деле не должен использоваться для одновременного доступа, который является проблемой, с которой вы сталкиваетесь. Вы можете попытаться увеличить время ожидания в файле database.yml который может быть обходным путем для вас в этом случае. Тем не менее, я бы рекомендовал вам перейти на другую базу данных, которая поддерживает несколько соединений, таких как MySQL или PgSQL.

Для меня … проблема была в том, что казалось, что консоль Rails, которую я открыла некоторое время, блокировала соединение с SQLite.

Поэтому, как только я вышел из этой консоли и перезапустил свой веб-сервер (Thin), он работал отлично.

Я попробовал предложение @ trisweb, но это не сработало для меня.

У меня была та же «ActiveRecord :: StatementInvalid: SQLite3 :: BusyException: firebase database заблокирована: INSERT INTO« пользователи »(« created_at »,« email »,« name »,« password_digest »,« updated_at ») VALUES (?,? ,?,?,?) “. Я старался изо всех сил найти в Google, и я потерпел неудачу. Проблема была решена для меня, когда я закрыл свой SQLite Database Browser.

Убедитесь, что у вас нет двух охранников или нескольких консолей. Если вы хотите, убедитесь, что отчаянно видите ответ «Нет имени» выше.

Вы также можете попробовать увеличить пул:

например: изменить тестовый раздел в config / database.yml, как показано ниже

 test: adapter: sqlite3 database: db/test.sqlite3 pool: 50 timeout: 5000 

Возможно, у вас есть консоль Rails, открытая на другой bash, если вам нужно закрыть ее (ctrl + D).

на самом деле для меня, я нашел, что убивающие rails помогают решить эту проблему.

используйте "ps aux | grep rails" чтобы узнать текущий идентификатор процесса rails. затем используйте

 "kill -9 [rails-pid]" 

для уничтожения процессов.

Тогда это сработает

Скорее всего, это не связано с кодом rails. В то же время консоль с опцией песочницы ( rails console --sandbox ) делает проблему систематической с SQLite, так как консоль в основном ждет выхода, чтобы откатить все.

Решение выше из @trisweb не будет работать в этом случае, но выход из консоли будет.

Да, это старый вопрос, и здесь уже много ответов. Но никто из них не работал для меня, а это означало, что мне потребовалось много времени, чтобы, наконец, выяснить проблему. Я нашел, что сработало и поделится им, если это то, что может вызвать у вас проблему.

Я использовал SQLITE Browser (его браузер базы данных GUI). Я буду называть его «GUI» здесь (чтобы предотвратить путаницу со словом browser, являющимся вашим браузером localhost :: 8000 chrome или что-то еще.
http://sqlitebrowser.org/

Я наблюдал за тем, что записывалось в базу данных, и открывал GUI, пока мое приложение rails запускалось в моем браузере Chrome. Я бы обновил графический интерфейс, чтобы посмотреть, добавляет ли он данные, как я ожидал.

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

Как оказалось, SQLite Browser фактически не удаляет строку (вызывая путаницу на моем конце относительно того, почему мое приложение действовало так, как будто строка все еще была там, хотя это визуально отсутствовало в графическом интерфейсе). В любом случае после 30 минут разочарования я закрыл GUI SQLite, а затем получил уведомление о том, что я хотел сохранить любые изменения в базе данных, которую я создал. Я наивно нажал «Нет» и закрыл приложение.

По-видимому, происходит то, что GUI затем заблокировал базу данных, потому что в моей базе данных были строки, которые были «мягко удалены» без фиксации на удаление. Таким образом, GUI был (из-за отсутствия лучшего термина), содержащего базу данных в Limbo.

Это объясняет, почему: а) мое приложение не действовало подобно тому, как строка отсутствовала, поскольку она еще не была удалена, а B) объясняет, почему firebase database заблокирована. Я все еще ожидал, что я удалю его.

Поэтому, чтобы решить эту проблему, я просто снова открыл графический интерфейс и удалил ту же строку, а затем закрыл графический интерфейс, и на этот раз я нажал «Да», когда просил сохранить изменения в базе данных . Он сохранил удаление и разблокировку базы данных, и теперь мое приложение работает!


Надеюсь, это поможет кому-то другому, у которого может быть такая же проблема, но он использует интерфейс GUI для браузера SQLite. Это может быть то, что блокирует вашу базу данных.

Я была такая же проблема. Для тех, у кого есть SQLite Database Browser. Мне не нужно было закрывать SQLite Database Browser. Мне просто нужно было нажать кнопку «Write Changes». Он подсвечивается и не должен быть выделен.

У SQLite проблемы с параллелизмом. Я изменил sqlite на Postgresql, и проблема исчезла

Это происходит, когда вы вносите какие-либо изменения вручную непосредственно в SQlite DB Browser (например, удаляете строку или изменяете значение любого столбца) и забываете сохранять эти изменения. Любые сделанные изменения необходимо сохранить ( ctrl + s ). Если не сохранить, SQLite блокирует базу данных до тех пор, пока вы не сохраните эти изменения.

Я сделал то же самое, и моя проблема была решена!

моя проблема: я открыл программу управления базами данных под названием «Браузер DB для SQlite». Закрыл эту программу управления базами данных, и проблема решена.

Я одновременно использовал DB Browser для SQLite и rails console. Закрытие DB Browser for SQLite исправило проблему для меня.

попробуйте перезапустить сервер или закрыть любую консоль с управляемыми рельсами, работал для меня

  • Таблица SQL со строкой «список» и таблицей SQL со строкой для каждой записи
  • Вставка имени таблицы в запрос дает sqlite3.OperationalError: рядом с «?»: Синтаксическая ошибка
  • Самый простой код для заполнения JTable из ResultSet
  • SQLITE3 VACUUM, «firebase database или диск заполнен»
  • Исключение SQLite: SQLite Занято
  • Адаптер DB для нескольких таблиц SQLite для Android?
  • Пример программы sqlite в android
  • Заполнить базу данных Android из файла CSV?
  • Android-колонка «_id» не существует?
  • SQLite UPSERT / UPDATE ИЛИ INSERT
  • Как восстановить поврежденную базу данных SQLite3?
  • Давайте будем гением компьютера.