やりたいこと
現在、ユーザ登録をCSVで一括登録する機能を実装しています。
この機能でユーザ登録する際に、AD連携する処理をmodelsのbefore_saveに実装していましたが、ユーザの登録数が増えることを見込んで、AD連携する処理をバックグラウンドで処理する方法に変えようと考えています。
このバックグラウンドでの処理をResqueで行うとしています。
困っていること
今まで、modelsで行ってた処理をjobに移そうとしているのですが、以下のようなエラーが出てしまっています。
Unsupported argument type: CSV
調べた所、ActiveJobの引数に渡す際は、制限があるようで。。
何か良い対応方法あったら、教えてほしいです。
model側でAD連携処理を実装している時点
以下が、ActiveJobへ引っ越しする前の状態です。
ruby
1class User < ActiveRecord::Base 2 def self.import(param1,param2) 3 open(file.path, 'r:cp932:utf-8', undef: :replace) do |f| 4 csv = CSV.new(f, :headers => :first_row) 5 csv.each do |row| 6 # AD連携処理 7 end 8 end 9 end 10end
エラーが発生した際のコード
以下が、ActiveJob側へ引っ越しした際に書いてたコードです。
上の状態と変わらず、ただ、ActiveJobに投げてみただけという修正内容です。
ruby
1class User < ActiveRecord::Base 2 def self.import(file,system_id) 3 open(file.path, 'r:cp932:utf-8', undef: :replace) do |f| 4 csv = CSV.new(f, :headers => :first_row) 5 csv.each do |row| 6 UserRegisterJob.perform_later(row,system_id) 7 end 8 end 9 end 10end
以下が、jobs/user_register_job.rb側
ruby
1class UserRegisterJob < ActiveJob::Base 2 queue_as :default 3 4 def perform(row,system_id) 5 p row 6 end 7end
本当は、csvファイルの中身を1回で全て渡したかったんですが、まずは、1行ずつでも良いかと思い、上記の書き方をしました。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。