Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.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 ActiveRecord::语句无效SQLite3::BusyException:数据库在批插入中被锁定_Ruby On Rails_Ruby_Activerecord_Sqlite_Batch Insert - Fatal编程技术网

Ruby on rails ActiveRecord::语句无效SQLite3::BusyException:数据库在批插入中被锁定

Ruby on rails ActiveRecord::语句无效SQLite3::BusyException:数据库在批插入中被锁定,ruby-on-rails,ruby,activerecord,sqlite,batch-insert,Ruby On Rails,Ruby,Activerecord,Sqlite,Batch Insert,我正在使用以下方法进行批量插入 module DatabaseHelper ActionHelper = ActionController::Base.helpers CONN = ActiveRecord::Base.connection def self.mass_sql_insert(klass, columns, values, batch_size = 500) table = klass.constantize.table_name if klass.cons

我正在使用以下方法进行批量插入

module DatabaseHelper

  ActionHelper = ActionController::Base.helpers
  CONN = ActiveRecord::Base.connection

  def self.mass_sql_insert(klass, columns, values, batch_size = 500)
    table = klass.constantize.table_name if klass.constantize.kind_of?(Class)
    values.each_slice(batch_size) do |batch|
      sql = ActionHelper.sanitize("INSERT INTO #{table} (#{columns.join(', ')}) VALUES #{batch.join(', ')}")
      CONN.execute sql
    end
  end
此方法非常有效,但最近刚开始抛出以下错误:

ActiveRecord::StatementInvalid (SQLite3::BusyException: database is locked:

这个错误之后是我试图执行的SQLINSERT命令。当我把它直接放进数据库控制台时,它工作得很好。有什么建议吗?

SQLite实际上不应该用于并发访问,这正是您在这里遇到的问题。您可以尝试增加
数据库中的超时时间。yml

development:
  adapter: sqlite3
  database: db/my_dev.sqlite3
  timeout: 10000

最好使用另一个db引擎来提高并发性

SQLite实际上不应该用于并发访问,这正是您在这里遇到的问题。您可以尝试增加
数据库中的超时时间。yml

development:
  adapter: sqlite3
  database: db/my_dev.sqlite3
  timeout: 10000

最好使用另一个db引擎来提高并发性

仅仅增加时间并不能解决我的问题。如何更改池大小,使其不尝试使用并发访问。。。?任何其他建议仅仅增加时间并不能解决我的问题。如何更改池大小,使其不尝试使用并发访问。。。?还有其他建议吗