我有一个配置了混合mysql和sqlite3数据库连接的rails应用程序,并且为了将特定模型与sqlite3相关联,我在每个类定义中添加了“establish_connection'sqlite_db_config_name'”行 .
当我尝试单独保存任何sqlite3连接的模型对象时,保存成功,但是当我尝试保存由其他对象组成的对象时(通过has_many),我得到一个BusyException . 我有一种感觉,因为每个对象都有自己的数据库连接,顶级对象锁定数据库,然后调用成员对象的保存方法,他们无法获取锁 .
我假设有一种方法可以使这项工作,我正在使用不正确的connect_connection .
其他人遇到这个吗?
database.yml config:
开发:
development:
adapter: mysql
database: maindb
username: root
password:
host: localhost
sqlite:
adapter: sqlite3
database: db/db.sqlite3
timeout: 15000
型号定义:
class Foo < ActiveRecord::Base
establish_connection 'sqlite'
belongs_to :bar
end
class Bar < ActiveRecord::Base
establish_connection 'sqlite'
has_many :foo
def addFoo(item)
self.foos << item
end
end
class MysqlModel < ActiveRecord::Base
end
其他:
Ruby 1.8.7
Rails 2.3.4
Ubuntu 10.04
更新:
我尝试使用继承来隔离单个类中的establish_connection语句,这是基于rails doc的解释:“此功能是通过在ActiveRecord :: Base中保留连接池来实现的,该连接池是由类索引的哈希 . 如果请求连接,retrieve_connection方法将上升到类层次结构,直到在连接池中找到连接 . “但由于某些原因,rails将sqlite连接类的子类与默认的mysql连接相关联 . 所以我放弃了尝试与sqlite的has_many / belongs_to关系,并取消规范化我的模型 .