gpt4 book ai didi

ruby-on-rails - SQLite3::BusyException:数据库被锁定:INSERT INTO

转载 作者:行者123 更新时间:2023-12-03 18:28:43 25 4
gpt4 key购买 nike

当我使用任务运行这段代码时,它可以工作

task :importGss => :environment do
Gss.delete_all
file = Rails.root + "app/assets/CSVs/gss.csv"
csv_text = File.read(file)
puts csv_text.size
csv = CSV.parse(csv_text, :col_sep => ';', :headers => true)
csv.each do |row|
Gss.create!(row.to_hash)
end

当我使用 MVC 运行它时,我收到以下消息:

ActiveRecord::StatementInvalid (SQLite3::BusyException: 数据库被锁定:

我已经把上面的代码放在了 Gss 模型中的一个函数中。
导入是从浏览器使用 GET 启动的,该 GET 路由到调用模型导入函数的 Controller
导入完成后,应将完整的记录列表返回到 View 。
csv 文件有 4k 行。
导入过程需要时间,似乎 60 秒后重新发送 GET。
有人可以解释一下如何避免重新发送导致导入崩溃吗?

最佳答案

将其包装在事务中将确保所有查询将一起运行,而不是一次运行 1 个。这将大大减少为那么多行执行导入所需的时间。

task :importGss => :environment do
Gss.delete_all
file = Rails.root + "app/assets/CSVs/gss.csv"
csv_text = File.read(file)
puts csv_text.size
csv = CSV.parse(csv_text, :col_sep => ';', :headers => true)

ActiveRecord::Base.transaction do
csv.each do |row|
Gss.create!(row.to_hash)
end
end
end

在此处阅读有关交易的更多信息: http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html

关于ruby-on-rails - SQLite3::BusyException:数据库被锁定:INSERT INTO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39773224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com