从一个表中获取数据然后插入另一个表Mysql,Sidekiq,Ruby

时间:2015-08-03 12:47:19

标签: ruby-on-rails sinatra sidekiq

我们必须从一个表中获取大约5百万条记录,然后将它们插入到具有相同表结构的另一个表中。

我们正在使用Sidekiq和redis将记录插入队列并从队列中插入。

这是我的代码: User_controller

def reinsert_users    
   @active_users = ExportUser.all
   RecreateUserWorker.perform_async(@active_users)
end

recreateuser_worker.rb

class RecreateUserWorker
  include Sidekiq::Worker

  def perform(users)
    begin     
      @user = User.new("true")
      @user.recreate(users)
    rescue
      raise
    end
  end

end

'' '''

User.rb :

def recreate(users)
    users.each do |user|
      @user = ExportUsersV2.new(user)  # new table to insert
      @user.save     
    end
end

这是我得到的错误:

WARN: {"class"=>"RecreateUserWorker", "args"=>["#<ExportUser::ActiveRecord_Relation:0xa3781b0>"], "retry"=>true, "queue"=>"default", "jid"=>"25fe4378de1bb967ff4d1e5e", "enqueued_at"=>1438605202.8414373, "error_message"=>"undefined method `each' for \"#<ExportUser::ActiveRecord_Relation:0xa3781b0>\":String", "error_class"=>"NoMethodError", "failed_at"=>1438605202.8470101, "retry_count"=>0}

我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

我认为最好使用直接mysql查询在批量中插入用户。

您可以使用gem https://github.com/tauqeer-ahmad/bulk_uploadable/tree/master或任何其他宝石。

我认为这可以解决这个问题。