首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActiveRecord、Sqlite3和BusyException

问ActiveRecord、Sqlite3和BusyException
EN

Stack Overflow用户
提问于 2011-05-13 03:55:47
回答 1查看 1.7K关注 0票数 1

我有一个配置了mysql和sqlite3数据库混合连接的rails应用程序,为了将特定的型号与sqlite3关联起来,我在每个类定义中添加了一个"establish_connection 'sqlite_db_config_name'“行。

当我尝试单独保存任何与sqlite3连接的模型对象时,保存是成功的,但是当我尝试保存由其他对象组成的对象(通过has_many)时,我得到一个BusyException。我有一种感觉,这是因为每个对象都有自己与数据库的连接,而顶级对象会锁定数据库,然后调用成员对象的save方法,而它们无法获得锁。

我假设有一种方法可以让它工作,但我不恰当地使用了establish_connection。

还有人遇到过这个问题吗?

database.yml配置:

开发人员:

代码语言:javascript
复制
development:
  adapter: mysql
  database: maindb
  username: root
  password:
  host: localhost

sqlite:
  adapter: sqlite3
  database: db/db.sqlite3
  timeout: 15000

模型定义:

代码语言:javascript
复制
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文档的解释:“此功能是通过在ActiveRecord::Base中保留一个连接池来实现的,该连接池是由类索引的Hash。如果请求连接,retrieve_connection方法将沿着类层次结构向上移动,直到在连接池中找到连接为止。”但是由于某些原因,rails将sqlite连接的类的子类与默认的mysql连接关联起来。因此,我放弃了尝试使用sqlite建立has_ and / on _to关系,并对我的模型进行了反规范化。

EN

回答 1

Stack Overflow用户

发布于 2011-05-13 04:30:16

我认为"establish_connection 'sqlite'“造成了问题。试着去掉它。对于每个数据库(一个文件),SQLite只允许一个写入连接

如果在没有关闭数据库情况下对数据库执行多次写入,则会导致异常

Rails可以高效和自动地处理连接,所以我认为我们不需要单独建立连接。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5983699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档