我有一份工作(计划由delayed_job
),当新用户注册到应用程序时发送电子邮件。这是用户模式:奇怪的delayed_job行为
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
attr_accessible :email, :password, :password_confirmation, :remember_me, :country, :phone_number, :opt_in
def email=(email)
super
Delayed::Job.enqueue self
end
def perform
begin
UserMailer.welcome_email self
rescue => e
STDERR.puts "Cannot perform the mailer: #{e}"
end
end
end
负责注册新用户的操作是:
def create
user = User.new({:email => params[:email],
:password => params[:password],
:password_confirmation => params[:password_confirmation],
:country => params[:country],
:opt_in => Boolean(params[:opt_in]),
:phone_number => params[:phone_number]})
if user.save(:validate => false)
redirect_to wrap_users_path
end
end
当用户登记,我得到以下日志:
开始POST“/ wrap_users“为 ...于2011-05-30 12:58:35 +0200处理WrapUsersController#创建为HTML
参数 {“email”=>“xxxx”, “password”=>“[FILTERED]”, “password_confirmation”=>“[FILTERED]”, “phone_number”=>“xxx”, “ opt_in “=>” 真”, “国家”=> “法国”}
AREL(0.3ms的)INSERT INTO “delayed_jobs”( “优先级”, “尝试”, “处理程序”, “last_error”, “run_at”, “locked_at”, “failed_at”, “locked_by”, “created_at”, “的updated_at”)VALUES(0,0,“--- 红宝石/ ActiveRecord的:用户属性:
电子邮件: xxxx encrypted_password: $ 2A $ 10 $ DwHB/5zSp38xdAAIkYriSuwIiLyKy2geU5kLmzjz2f1WsAuxpqyIW reset_password_token:
reset_password_sent_at:
remember_created_at:sign_in_count: 0 current_sign_in_at:
last_sign_in_at:current_sign_in_ip: last_sign_in_ip:created_at:
的updated_at:国家:法国opt_in: 真正PHONE_NUMBER:XXX ', NULL,'2011-05-30 10:58:35.250464', NULL,NULL,NULL,'2011-05-30 10:58:35.250560','2011-05-30 10:58: 35.250560')AREL(2.1ms)INSERT INTO “用户”( “电子邮件”, “encrypted_password”, “reset_password_token”, “reset_password_sent_at”, “remember_created_at”, “sign_in_count”, “current_sign_in_at”, “last_sign_in_at”, “current_sign_in_ip” , “last_sign_in_ip”, “created_at”, “的updated_at”, “国家”, “opt_in”, “PHONE_NUMBER”)值 ( 'XXX', '$ 2A $ 10 $ DwHB/5zSp38xdAAIkYriSuwIiLyKy2geU5kLmzjz2f1WsAuxpqyIW', NULL,NULL ,NULL,0,NULL,NULL,NULL, NULL,'2011-05-30 10:58:35.251788', '2011-05-30 10:58:3 5.251788' , '法国', 'T', 'XXX') 重定向到 http://...:3000/wrap_users 完成302实测值在277ms
正如你可以看到,根据日志的条目被记录到Delayed::Job
表。但事实上,当计算此表中的记录数时(在相同开发模式下的rails console
),我得到0。
这是怎么回事?日志没有提及有关insert into delayed_jobs
步骤的任何问题。
感谢
那么这就是为什么它很奇怪。我正在运行的工人没有处理这项工作!所以没有理由将这项工作删除。 – 2011-05-30 16:03:28
所以显然你是对的!它无论如何处理它们:) – 2011-05-30 18:45:29
我仍然强烈建议使用回调或观察者的方法,而不是重写setter。 – Roman 2011-05-31 08:15:31