我们必须从一个表中获取大约5百万条记录,并将它们插入具有相同表结构的另一个表中。从一个表中获取数据,然后插入到另一个表中Mysql,Sidekiq,Ruby
我们使用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}
我在这里错过了什么?
是bulk_uploadable宝石是不够好,在一杆插入3-4百万的记录?它是异步过程?如果由于某种原因没有插入任何记录,那么我们如何跟踪失败的记录? – joe