Ruby on rails 3 奇怪的工作行为

Ruby on rails 3 奇怪的工作行为,ruby-on-rails-3,actionmailer,delayed-job,Ruby On Rails 3,Actionmailer,Delayed Job,我有一个作业(由delayed_job安排),当新用户注册到应用程序时,它会发送电子邮件。这是用户模型: class User < ActiveRecord::Base devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable attr_accessible :email, :password, :password_c

我有一个作业(由
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
当用户注册时,我会得到以下日志:

已为启动POST“/wrap\u用户” ... 2011-05-30 12:58:35+0200 WrapuserController处理#创建为HTML

参数: {“email”=>“xxxx”, “密码”=>“[已筛选]”, “密码确认”=>“[已筛选]”, “电话号码”=>“xxx”, “选择加入”=>“真实”、“国家”=>“法国”}

AREL(0.3ms)插入到 “延迟工作”(“优先级”), “尝试”、“处理程序”、“最后一个错误”, “运行时间”、“锁定时间”、“失败时间”, “锁定者”、“创建者”, “更新的”值(0,0,'--- !ruby/ActiveRecord:用户属性:
电邮:xxxx 加密密码: $2a$10$DwHB/5ZSP38XDAIKYRISUWIIKY2GEU5KLMZJZ2F1WSAUXPQYIW 重置密码\u令牌:
重置密码发送地址:
请记住在以下位置创建:在计数中签名: 0当前登录地址:
上次登录地址:当前登录ip: 最后一次登录ip:创建地址:
更新地址:国家:法国选择加入: 真实电话号码:xxx', 空,“2011-05-30 10:58:35.250464”, 空,空,空,2011-05-30 10:58:35.250560', '2011-05-30 10:58:35.250560’)阿雷尔(2.1ms)

插入“用户”(“电子邮件”), “加密密码”, “重置密码\u令牌”, “重置密码发送地址”, “记住你在那里创造的”, “登录次数”、“当前登录时间”, “最后一次签名在”, “ip中的当前签名”, “ip中的最后一个签名”,“创建于”, “更新地点”、“国家”、“选择加入”, “电话号码”)值 (‘xxx’, “$2a$10$DwHB/5ZSP38XDAIKyrisuwiilyKy2GEU5KLMZJZ2F1WSAUXPQYIW”, 空,空,空,0,空,空,空, 空,“2011-05-30 10:58:35.251788”, '2011-05-30 10:58:35.251788', ‘法国’、‘t’、‘xxx’) 重定向到 277ms内完成302个

如您所见,根据日志,正在将一个条目记录到
Delayed::Job
表中。但事实上,当计算表中记录的数量时(在相同开发模式下的
rails控制台上),我得到了0

发生了什么事?日志中没有提到有关插入延迟作业的
步骤的任何问题


谢谢

表是空的,可能是因为工作人员将作业从表中删除了。
作为旁注,我将使用after_create callback而不是email=来安排作业。至少有一个原因——即使验证失败,你还是会发送电子邮件。

这就是为什么它很奇怪。我正在运行的工人没有处理作业!所以没有理由删除作业。我仍然强烈建议使用回调或观察方法,而不是重写setter。确实如此。我更改了它,我正在使用after_create now!:)
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