Rails SQLite3数据库锁尝试多线程对象更新

时间:2013-10-09 21:33:32

标签: ruby-on-rails multithreading sqlite

我有一个需要生成多个线程的应用程序,并在每个线程中更新数据库。当我只生成1个线程并在系列中进行更新时,一切都很好,但是当尝试多线程时我在日志中遇到错误:

  

SQLite3 :: SQLException:SQL逻辑错误或缺少数据库:回滚事务   和   SQLite3 :: BusyException:数据库被锁定

我认为锁定是由于第一个错误。

以下是导致此问题的代码:

all_threads = []
servers.each do |server|
  all_threads << Thread.new(server) do |svr|
    serverCurrent = Server.find(svr.id)
    serverCurrent.state = 3
    serverCurrent.save
  end
end
all_threads.each(&:join)

如果我在线程内部循环服务器(因此只创建一个线程,一切都很好)。我使用的数据库是SQLite3

1 个答案:

答案 0 :(得分:0)

SQLite3中的线程支持取决于编译时使用的选项。

有关SQLite3线程的详细信息: http://www.sqlite.org/threadsafe.html

可能的解决方案: http://dev.yorhel.nl/doc/sqlaccess