rake db: мигрирует выбрасывание BusyException: база данных заблокирована исключение - PullRequest
3 голосов
/ 28 марта 2011

Я изучаю учебник по Ruby on Rails Майкла Хартла, и в главе 6 мне поручено создать новую миграцию для добавления индекса в столбец электронной почты в таблице пользователей.

Вотмоя миграция:

def self.up
  add_index :users, :email, :unique => true
end

def self.down
  remove_index :users, :email
end

Когда я запускаю rake db: migrate, он думает на секунду, затем выдает исключение BusyException и говорит, что база данных заблокирована.База данных представляет собой базу данных sqlite3, хранящуюся на моем локальном компьютере в моей пользовательской папке;ничего особенного.

Любая помощь очень ценится.

Ответы [ 6 ]

7 голосов
/ 28 марта 2011

Я получаю это все время, оно заключается в том, что sqlite может быть доступен только одному процессу за раз, и база данных заблокирована этим процессом. Убедитесь, что у вас нет серверов или консолей, работающих в другом терминале. Если вы продолжаете получать это и уверены, что к базе данных sqlite больше нет доступа (включая процессы-зомби), вы можете следовать совету здесь:

Как разблокировать базу данных SQLite?

2 голосов
/ 09 февраля 2012

У меня была такая же проблема. Для меня браузер баз данных SQLite был открыт с той же базой данных, которая его блокировала.

2 голосов
/ 11 апреля 2011

Почти то же самое случилось со мной. Простое решение выходило из моей консоли rails. Он блокировал SQLite.

1 голос
/ 20 июня 2011

/ согласен с Кристофером

Для тех из нас, кто работает на Unix-машинах, простое

$: ps -a | grep ruby
$: kill -s 9 XXXX

процессов ruby ​​от терминалов, которые я подозревал, поскольку преступник сделал это для меня. Это всегда было вызвано консолью или сервером, который зависал так, что я убил его, а затем должен был найти процесс «зомби», чтобы разблокировать базу данных.

В Windows это не может быть сложнее, чем просто убить подозрительное дерево процессов.

0 голосов
/ 14 апреля 2017

У меня ничего не получалось. Я удалил все файлы * .sqlite3 и затем запустил

rake db:create
rake db:migrate

Тогда это сработало.

PS: файлы sqlite3 находятся в папке db вашего корневого каталога проекта rails

0 голосов
/ 24 февраля 2013

Решение моей BusyException проблемы, "очевидной" в ретроспективе, заключалось в том, что у меня не было доступа для записи в базу данных SQLite3.У меня был git clone'd проект rails для файловой системы, обслуживаемой Windows, к которой я получал доступ из коробки Ubuntu.По какой-то причине Sqlite3 базы данных были созданы с разрешением + x, которое Sqlite3 должно интерпретироваться как занятое.

Только после большого количества работ, подтверждающих версии, гемы, рубины и т. Д., Я заметил, что права доступа к файлам были + x.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...