Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 尝试更新多线程对象的Rails SQLite3 DB锁_Ruby On Rails_Multithreading_Sqlite - Fatal编程技术网

Ruby on rails 尝试更新多线程对象的Rails SQLite3 DB锁

Ruby on rails 尝试更新多线程对象的Rails SQLite3 DB锁,ruby-on-rails,multithreading,sqlite,Ruby On Rails,Multithreading,Sqlite,我有一个应用程序,需要产生多个线程,并在每个线程更新数据库。当我只生成1个线程并进行串联更新时,一切正常,但当尝试多线程时,日志中会出现错误: SQLite3::SQLException:SQL逻辑错误或缺少数据库:回滚事务 和 SQLite3::BusyException:数据库已锁定 我假设锁定是因为第一个错误 以下是导致问题的代码: all_threads = [] servers.each do |server| all_threads << Thread.new(ser

我有一个应用程序,需要产生多个线程,并在每个线程更新数据库。当我只生成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)
所有线程=[]
服务器。每个do |服务器|

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

有关SQLite3线程的详细信息:

可能的解决办法:

刚刚用mysql2 gem更新到mysql,似乎已经解决了这个问题。无法使SQLite3正常工作。