【问题标题】:Delayed job throwing an error failed with TypeError: can't convert String into Hash延迟作业引发错误,TypeError 失败:无法将字符串转换为哈希
【发布时间】:2014-08-20 21:32:19
【问题描述】:

实际上,我正在使用延迟作业在后台运行电子邮件进程。当我调用delayed_job 的延迟方法时,它会将记录插入Delayed::Job 表但邮件没有发送,当我检查delayed_job.log 时,它包含“失败并出现TypeError:无法将nil 转换为哈希”错误。

UserMailer.rb 文件包含以下代码

 def welcome_email(user)
    @username = user.name
    setup_email(user)
 end

在用户控制器中

UserMailer.delay.welcome_email(User.last)

但是当我删除延迟方法时,邮件就会发送 代码是:

UserMailer.welcome_email(User.last).deliver

我不明白为什么这个错误会延迟出现,请帮我找出这个问题的原因。

【问题讨论】:

  • setup_email 方法是做什么的?你能分享那个代码吗?

标签: ruby-on-rails delayed-job


【解决方案1】:

检查您的邮件配置。

【讨论】:

    【解决方案2】:

    使用这个

     def welcome_email(user)
      ##access hash in this way user['email']..not using dot operator user.email
      @user=User.find_by_email user['email']
      mail(:to => user['email'], :subject => "Hi #{user['username']},Welcome to mywebsite.com")
    end
    

    此外,对于delay,您需要运行rake jobs:work 任务以使延迟作业的进程从该表中完成作业。没有这个,您将不会收到任何电子邮件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-29
      • 1970-01-01
      • 2015-02-06
      相关资源
      最近更新 更多