【发布时间】:2013-07-19 22:23:33
【问题描述】:
很长时间以来,我一直在尝试实施 DelayedJob 自定义作业,但在网上找不到太多关于如何从头到尾执行此操作的信息,而且几乎找不到与发送大量信息无关的信息电子邮件(我已经阅读了collectiveidea 的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 方法的一部分。
这是我的控制器(只显示了创建方法):
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
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 delayed-job