如何在不超时的情况下使用delayed_job插入数千条记录?

时间:2014-10-12 15:35:31

标签: ruby-on-rails ruby-on-rails-4 rails-activerecord delayed-job

我需要在特定请求中向表中插入数千条记录。现在我就是这样做的:(让我们说我尝试将相同的咖啡倒入数千杯)

@cups.each do |cup|
  cup.delay.pour @coffee
end 

现在通常这不是什么大问题,但是当有数万个杯子时,即使每个任务都在后台处理,添加任务本身也需要一段时间。所以我注意到它开始添加几百个任务,然后请求超时,其余的不会被添加到作业队列中。

我使用的是独角兽,到目前为止,我通过荒谬地增加允许的超时时间来处理这个问题(比如200秒)并且它正在运行。但我无法永远这样做。任何人都有关于如何正确处理这个问题的任何提示?感谢

1 个答案:

答案 0 :(得分:1)

尝试使用Active record mass insert。

CONN = ActiveRecord::Base.connection
TIMES = 10000

inserts = []
TIMES.times do
    inserts.push "(3.0, '2009-01-23 20:21:13', 2, 1)"
end
sql = "INSERT INTO user_node_scores (`score`, `updated_at`, `node_id`, `user_id`) VALUES #{inserts.join(", ")}"
CONN.execute sql