私は非常に長い間 DelayedJob カスタム ジョブを実装しようとしてきましたが、これを最初から最後まで実行する方法に関してオンラインで多くの情報を見つけることができず、大量の電子メールの送信に関するもの以外はほとんど何も見つかりません (私は'collectiveidea's Github イントロ、Railscasts、SO の質問などを読みました)。Rails に比較的慣れていないので、経験のある人にとっては説明が明確である可能性が高いと思いますが、私のレベルの誰かがこれを適切に機能させる方法を理解するには、説明が十分に明確ではありません。
私のタスクの目的は、ジョブを実行してからオブジェクトを破棄することです (DelayedJob が完了したすべてのジョブを破棄することは承知していますが、ジョブの完了時にオブジェクトをデータベースから破棄することも必要です)。
create
以前は、コントローラのメソッドで DelayedJob 非カスタム ジョブを使用してこれを行っていました: user.delay.scrape
、その後に が続き、user.delay.destroy
うまく機能しました。したがって、私のアプリケーションの他のすべては正常に機能しており、問題は厳密にはこのカスタム ジョブの設定方法にあります。ただし、さまざまな理由から、この場合はカスタム ジョブを作成する方がはるかに優れています。
以下は、アプリで DelayedJob を設定した現在の (動作していない) 方法です。ただし、アプリを実行すると、コンソールに次のように報告されますuninitialized constant UsersController::UserScrapeJob
。これを適切に機能させる方法についての提案は大歓迎です。このリクエストに関する質問があれば喜んでお答えします。
これが私のモデルです:
class User < ActiveRecord::Base
def scrape
some code here...
end
end
私のコントローラーでは、遅延ジョブはcreate
メソッドの一部として機能する必要があります。
そして、これが私のコントローラーです( create メソッドのみが表示されています):
class UsersController < ApplicationController
@user = User.new(params[:user])
if @user.save
Delayed::Job.enqueue UserScrapeJob.new(user.id)
else
render :action => 'new'
end
end
そしてuserScrapeJob.rb
、これがapp/jobs
フォルダ内にあるジョブファイルです。
class UserScrapeJob < Struct.new(:user_id)
def perform
user = User.find(user_id)
user.scrape
user.destroy
end
end