1

私は非常に長い間 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
4

2 に答える 2

1

ジョブ ファイルの名前を からuserScrapeJob.rbに変更してみてくださいuser_scrape_job.rb

Railsを呼び出すとUserScrapeJob.new、クラス名がスネーク ケース(つまり user_scrape_job) に変換され、その名前の対応するファイル user_scrape_job.rb が検索されます。

于 2013-07-19T14:23:33.373 に答える