Sidekiq延迟电子邮件,未定义的方法错误

时间:2014-03-20 22:36:13

标签: ruby-on-rails sidekiq

我在Ruby 2.0上使用Ruby on Rails 4并在我的app目录中使用redis-serverbundle exec sidekiq在本地运行redis-server和sidekiq 2.17.7。我想使用像这样的sidekiq延迟发送电子邮件:

UserMailer.delay.signup_notification(@user.id, @user.email, activate_url, @user.activation_token, root_url)

signup_notification内的UserMailer操作是这样的:

def signup_notification(user_id, user_email, activate_url, activation_token, root_url)
  return if Rails.env.test?

  @user = User.find(user_id)
  if @user.email.downcase == user_email.downcase
      @activate_url     = activate_url
      @activation_token = activation_token
      @root_url         = root_url
      mail :to => @user.email, :subject => "Welcome to #{t('product.name')} by AppName"
  else
      logger.warn "[#{self.class.name}##{__method__}]  told to send email to user(id: #{user_id}, email: #{user_email}), but actual user is: #{@user.inspect}"
  end

end

我在sidekiq中遇到一个错误:

WARN: {"retry"=>true, "queue"=>"default", "class"=>"Sidekiq::Extensions::DelayedMailer", "args"=>["---\n- !ruby/class 'UserMailer'\n- :signup_notification\n- - 6cI7bbeTKXCEROwf1qxdkE\n  - user@test.com\n  - http://0.0.0.0:3003/activate\n  - 76-hibLYSPlcRiN9BTxt_g\n  - http://0.0.0.0:3003/\n"], "jid"=>"c2413ca2c2597af07eb6146c", "enqueued_at"=>1395351890.0875876, "error_message"=>"undefined method `email' for nil:NilClass", "error_class"=>"NoMethodError", "failed_at"=>"2014-03-20T21:44:51Z", "retry_count"=>6, "retried_at"=>1395353704.7546926}
WARN: undefined method `email' for nil:NilClass
WARN: /home/jchan/projects/MyRailsProject/app/mailers/user_mailer.rb:24:in `signup_notification'

user_mailer.rb中的第24行距离上面的代码if @user.email.downcase == user_email.downcase

我确定@user.id以及我传入的其他所有内容都不是nil,如果我不使用.delay(并附加),一切都会完美无缺当然.deliverUserMailer.signup_notification来电。

好像值没有正确传递。我做错了什么?

0 个答案:

没有答案