読者です 読者をやめる 読者になる 読者になる

ウェブサービスを作っています。

Delayed Job で、can't dump anonymous class Class というエラーが発生する

Delayed Job とは何か

BackgrounDRb 的な何かです。詳しくはググれば、英語のチュートリアル的なものがいろいろ見つけられると思います。

コンストラクタで複雑なことをしているとエラーになる

class CrawlJob
  def initialize
    @agent = WWW::Mechanize.new
  end

  def perform
    ...
  end
end

を lib/crawl_job.rb として保存し、コントローラなどから

Delayed::Job.enqueue CrawlJob.new

すると、can't dump anonymous class Class (TypeError) というエラーが発生します。
理由は Delayed Job 内部で enqueue されたオブジェクトの YAML 化を行っているのですが、上の例の Mechanize オブジェクト生成のような複雑なことをコンストラクタで行っていると駄目なようです。
なので、

class CrawlJob
  def perform
    @agent = WWW::Mechanize.new
    ...
  end
end

などとします。


yaml ライブラリをもう少し詳しく調べれば深い理解が得られると思いますが、とりあえずコンストラクタでは複雑なことをせずに perform メソッドなどでいろいろ書いていけば良いと思います。