через rails has_many и несколько баз данных, вызывающих SQLite :: BusyException - PullRequest
0 голосов
/ 06 мая 2011

У меня есть приложение rails, которое использует несколько баз данных sqlite3 (эта часть не подлежит обсуждению), и у меня есть следующие классы

class User < ActiveRecord::Base
   establish_connection "users_#{Rails.env}" # use alternate DB
   has_many :memberships
   has_many :groups, through => :memberships
end

class Group < ActiveRecord::Base
   establish_connection "users_#{Rails.env}" # use alternate DB
   has_many :memberships
   has_many :users, :through => :memberships
end
class Membership < ActiveRecord::Base
   belongs_to :group
   belongs_to :user
   # validations stuff
   establish_connection "users_#{Rails.env}" # use alternate DB
end

Когда я создаю пользователя с группой, я получаю следующее:

ActiveRecord::StatementInvalid (SQLite3::BusyException: database is locked: INSERT INTO "memberships" ...

Однако, когда я удаляю вызов метода «create_connection» и использую единственную базу данных по умолчанию, все работает нормально и, как и ожидалось.

Я попытался увеличить время ожидания в database.yml до 15 секунд, но это же исключение просто появляется дольше.

1 Ответ

0 голосов
/ 06 мая 2011

Я тоже это видел.Несколько вещей, чтобы попробовать:

  • Увеличьте время ожидания в database.yml до 10-15 секунд.Вы уже сделали это, но это может помочь кому-то еще с этой проблемой.Если у вас медленный жесткий диск и много тестовых данных, возможно, 20 +
  • Либо удалите и заново создайте базу данных (если это в разработке, что, вероятно, не должно быть проблемой), или восстановитерезервное копирование этого.Там может быть проблема с ним, как это в настоящее время.Неправильно завершить работу сервера разработки, может быть?
  • Возможно, это растянуто, но убедитесь, что права доступа к файлу правильные.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...