在Rails 4应用中,用户可以从电子表格导入数据。这些方法基于此Railscast
save
函数检查导入记录是否有效,否则显示错误,或者如果所有记录都有效则保存。
def save
if imported_records.map(&:valid?).all?
imported_records.each do |record|
record.save!
end
true
else
imported_records.each_with_index do |record, index|
record.errors.full_messages.each do |message|
errors.add :base, "Row #{index+2}: #{message}"
end
end
false
end
end
如果电子表格只包含一些记录,则此方法可以正常工作。
但是在较大的电子表格中,该过程超出了应用的机架超时限制Request ran for longer than 30000ms
(设置为反映Heroku限制)。
超时发生在record.save
上,可能是因为模型有一些回调和在保存时执行的计算。
处理此问题的最佳方法是什么?
record.save!
方法移动到后台进程中,因为Sidekiq反对传递未保存的对象 - Unable
to create a Global ID for Record without a model id.
是否有一种简单的方法可以批量迭代这些记录保存以避免长时间运行的过程?
答案 0 :(得分:0)
我认为同样的问题已被回答是以前的帖子
参考: - Prevent request timeout with long requests
请参考帖子,我希望它有所帮助:)