延迟作业和Mandrill:未初始化的常量Mandrill :: API

时间:2014-07-05 02:30:19

标签: ruby-on-rails-3 delayed-job mandrill

我有邮件服务,用户可以使用电子邮件和其他一些用户相关数据上传.xls文件以发送电子邮件广告系列。

我遇到了一些超时问题,因为它需要花费几秒钟来处理(因为我会对要发送的每封电子邮件进行一些验证和配置,例如:将记录保存到数据库,检查过去30天是否发送了电子邮件,为每封电子邮件创建个性化的HTML代码(以创建包含电子邮件地址作为参数的链接等)。

经过一些研究,将其移至delayed job似乎是合理的,如this rails cast中所述。唯一的问题是我遇到了uninitialized constant Mandrill::API的错误,似乎当我运行这个工作时,调用require 'mandrill'不起作用。

我在模型文件中创建了任务。像这样的东西

class Mailer < ActiveRecord::Base
  attr_accessible :email, :lastname, :name

  def self.send_mail(emails)

    [...a lot of code here...]

    require 'mandrill'
    m = Mandrill::API.new ENV['MANDRILL_APIKEY']
    message = {
    :subject=> template.subject,
    :from_name=> template.from_name,
    :from_email=> from + "@" + email_domain,
    :to=>mails,
    :global_merge_vars=> [
      { :name => 'GREETING', :content => template.greeting},
      { :name => 'CONT1', :content => template.message},
      { :name => 'IMAGE', :content => image_url},
          ],
    :html=>email_template,
    :preserve_recipients => false,
    :merge_vars => email_contents,
    }
    sending = m.messages.send message

  end
end

来自我的控制器我打电话给Mailer.send_mails(emails)它工作得很好,但是如果我打电话给Mailer.delay.send_mails(emails)我就会收到错误。我该如何解决这个问题?

我尝试在课程开始时require 'mandrill'之前和之后添加class Mailer < ActiveRecord::Base,但似乎没有任何效果

1 个答案:

答案 0 :(得分:2)

确保重新启动delayed_job守护程序以获取任何代码更改。它不会像Rails开发环境那样自动重新加载。