2013-08-29 10 views
6

私は非同期に処理したいコントローラアクションを持っています。これが呼び出されるとRails 3 delayed_job "TypeError:匿名モジュールをダンプできません"

class CollectionsController < ApplicationController 
    def add 
    #code 
    end 
    handle_asynchronously :add 

私が取得: はTypeError:匿名モジュールをダンプすることはできません

delayed_jobのドキュメントは、方法はActiveRecordのモデル方法であることが持っているかどうかは明らかではありません。私は他のクラスを使用してこれを処理する例を見てきましたが、私のメソッドはセッション情報を使用しています。その情報が別のクラスに利用可能かどうかは私には不明です。

アイデア?

ありがとうございました。

+0

回答を参照してください:http://stackoverflow.com/questions/12956661/controller-action-to-delayed-job – fatfrog

答えて

8

遅延ジョブはActiveRecordのモデルである必要はありません、あなたはhttps://github.com/collectiveidea/delayed_job#custom-jobs

を参照して、昔ながらのRubyのクラスに機能を追加することができますあなたは、おそらくこれは同じようにコントローラのアクションが非同期に処理されないようにしますHTTP要求に不要な遅延を追加します。私のアドバイスはそうのようなコントローラにジョブをキューに次のようになります。

class CollectionsController < ApplicationController 
    def add 
    Delayed::Job.enqueue CollectionBuilderJob.new(@current_user.session_info) 
    end 
end 

class CollectionBuilderJob < Struct.new(:session_info) 
    def perform 
    #code 
    end 
end 

このアプローチは、あなたは、コントローラのメソッドでDJを使用することはできません

5

孤立してあなたの遅れの仕事をテストすることができます。それをモデルに移動します。

+2

なぜあなたは答えを拡大できますか?それは正しいもののようです。また、なぜそれをモデルに配置するだけですか?なぜ静的なシングルトンではないのですか? – vedant1811

+0

メソッドをクラスメソッドにすることができます。以下を参照してください。http://stackoverflow.com/questions/12956661/controller-action-to-delayed-job – fatfrog

関連する問題