Странное поведение delayed_job - PullRequest
1 голос
/ 30 мая 2011

У меня есть работа (запланированная на 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

Параметры: { "Электронная почта" => "хххх", "Пароль" => "[FILTERED]", "Password_confirmation" => "[FILTERED]", "Phone_number" => "ххх", "opt_in" => "true", "country" => "Франция"}

AREL (0.3ms) ВСТАВИТЬ В "delayed_jobs" ("приоритет", "попытки", "обработчик", "last_error", "run_at", "locked_at", "failed_at", "locked_by", "creation_at", "updated_at") ЗНАЧЕНИЯ (0, 0, '--- ! ruby ​​/ ActiveRecord: атрибуты пользователя:
электронная почта: хххх encrypted_password: $ 2a $ 10 $ DwHB / 5zSp38xdAAIkYriSuwIiLyKy2geU5kLmzjz2f1WsAuxpqyIW reset_password_token:
reset_password_sent_at:
запомнить_создано_от: sign_in_count: 0 current_sign_in_at:
last_sign_in_at: current_sign_in_ip: last_sign_in_ip: creation_at:
updated_at: страна: Франция opt_in: истинный номер телефона: ххх ', 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,1 мс)

INSERT INTO "users" ("email", "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", "creation_at", "updated_at", "страна", "opt_in", "phone_number") ЗНАЧЕНИЯ ( 'Ххх', '$ 2a $ 10 $ DwHB / 5zSp38xdAAIkYriSuwIiLyKy2geU5kLmzjz2f1WsAuxpqyIW', NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, '2011-05-30 10: 58: 35.251788', «2011-05-30 10: 58: 35.251788», 'Франция', 't', 'xxx') Перенаправлено на Http: // ...: 3000 / wrap_users Завершено 302 Найдено за 277 мс

Как видите, согласно журналу запись записывается в таблицу Delayed::Job. Но на самом деле при подсчете количества записей в этой таблице (на rails console в том же режиме разработки) я получаю 0.

Что происходит? В журнале не упоминалось ни одной проблемы, касающейся шага insert into delayed_jobs.

Спасибо

1 Ответ

3 голосов
/ 30 мая 2011

Таблица пуста, вероятно, из-за того, что работник забрал работу и удалил ее. В качестве примечания я бы использовал коллбэк after_create вместо email = для планирования работы. По крайней мере, по одной причине - даже если проверка не удалась, вы все равно отправите электронное письмо.

...