每当在启动工作者时使用cron作业+ delayed_job

时间:2012-04-21 04:53:58

标签: ruby-on-rails-3 cron delayed-job rake-task whenever

我正在学习cron工作和推迟工作,我想用后台工作发送电子邮件;因为我正在使用delayed_job宝石。我不想通过运行rake jobs:work命令手动启动工作程序,但是我想在cron作业中设置此rake,因此每当用户登录仪表板时,都会触发此命令并将邮件发送到他的地址。以下是我的代码:

发送邮件方法

def dashboard      
    @user = User.find(params[:id])      
    UserMailer.delay.initial_email(@user)      
end      

UserMailer

def initial_email(user)      
    @user = user     
    mail(:to => user.email,:subject => "Welcome to my website!")       
end      

对于cron作业,我每次都使用Gem,那么我应该在schedule.rb文件中写什么,这样当我登录仪表板时,我会收到一封邮件,而不是手动运行工人?

1 个答案:

答案 0 :(得分:0)

DelayedJob应该在后台一直运行,所以不需要启动它。 工作器代理检查队列以查看是否需要执行任何任务,并运行它们。 它非常类似于应用程序的第二个实例,它在后台运行,检查需要运行的任务。

因此,您应该使用script/delayed_job start启动worker代理并让它一直运行。您可以使用monit或god之类的单独工具来监视您的工作人员代理,以确保它始终在运行。