rails has_many through和多个数据库导致SQLite :: BusyException

时间:2011-05-06 06:23:05

标签: ruby-on-rails-3 sqlite

我有一个使用多个sqlite3数据库的rails应用程序(该部分是不可协商的),我有以下类

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" ...

但是当我删除“establish_connection”方法调用并使用单个默认数据库时,一切正常并且符合预期。

我已经尝试将database.yml中的超时时间增加到15秒,但同样的异常只需要更长时间才能显示。

1 个答案:

答案 0 :(得分:0)

我也看到过这种情况。一些事情要尝试:

  • 将database.yml中的超时时间提高到10-15秒。你已经这样做了,但它可以帮助其他人解决这个问题。如果您的硬盘速度很慢且测试数据很多,可能是20 +
  • 删除并重新创建数据库(如果这在开发中可能不应该是一个问题),或者还原它的备份。目前可能存在问题。可能错误地关闭了开发服务器?
  • 可能是一个延伸,但要确保文件的权限是正确的。