我的rails应用程序托管在Heroku上。我正在尝试通过简单的循环处理Postgresql DB中的数据
DocumentText.all.each do |t|
if is_number? t.src
puts t.src
t.targ = t.src
t.save
end
end
我的问题是我的Rails控制台在浏览了一些记录(不是全部记录)后将退出。
为什么会这样,我有什么选择?
在您的代码段中,您正在对数据库运行n个更新查询,这将花费很多时间,这就是为什么您的任务未完全运行的原因。
我建议对数据库运行一个更新查询。为此,请在您的Gemfile中添加以下gem []
gem 'activerecord-import'
documents = [] DocumentText.all.each do |t| documents << t if is_number?(t.src) end # MySQL version Book.import(documents, on_duplicate_key_update: {targ: :src}) # PostgreSQL version (no shorthand version) Book.import([book], on_duplicate_key_update: { conflict_target: [:id], columns: {targ: :src} })
这应该可以解决问题。如果您有数百万个数据,那么我还建议分批运行此过程。让我知道您是否需要帮助。
@@ Pradeep Agrawal的答案使我找到了使用activerecord-import gem的解决方案(他的答案是从gem复制并粘贴并包含错误)。