2016-05-13 8 views
1

大量メール送信のようなバックグラウンドタスクを処理するためにresqueワーカーを作成しようとしています。私が好きな何Ruby on Rails Resqueは、パラメータをハッシュとして実行します。

は、引数のハッシュを受け入れるように、私の労働者のためにある:私はself.perform(arg1, arg2, arg3, arg4, arg5)上好む

class Worker 
    @queue = :worker_queue 

    def self.perform(options={}) 
    user_id = options[:user_id] 
    end 
end 

すべてはコンソール(つまりWorker.perform(args))で動作します。しかし、これをresqueにキューイングするときはいつでも、引数は未定義です。

ActiveRecord::RecordNotFound: Couldn't find User with 'id'= 

誰でも正しい方向に向けることができますか?エンキューされたパラメータがJSONにシリアル化されていることはわかっています。

私はちょうどそれについて考えました。'user_id'の代わりに、:user_idのシンボルがシリアル化されているので、私の問題はそのようなものでしたか?

答えて

2

はい、正しいです。パラメータは、デシリアライズ/シリアライズされるとき、あなたはResqueワーカーに取得ハッシュが含まれているため、次のコードは、すべての犯人

user_id = options[:user_id] 

具体的には、ハッシュ(:user_id)における記号の使用はトラブルを引き起こす可能性がありますキーを文字列として返します。

あなたは使用する必要があります。

user_id = options["user_id"] 
0

はい私の疑惑は正しいです! JSONにシリアライズすると、Rubyシンボルが通常のキー文字列になります。

直前のコードのシンボルを'user_id'に変更するとすぐにすべてが機能し始めました。

関連する問題