Heroku rake任务没有加载ActionMailer类

时间:2011-02-27 01:07:37

标签: ruby-on-rails heroku actionmailer

我有一个rake任务,通过ActionMailer发送每日电子邮件。我的计划是每晚使用Heroku的cron工作来完成这项任务。

问题是Heroku无法识别我的ActionMailer类(通知程序)。具体错误是“Unitialized constant Notifier”。但是,Notifier类会在Heroku中的应用程序(控制器和模型)中的其他任何位置正确发送电子邮件,但不会从rake任务中发送。运行rake任务也 在本地工作。

如果我使用heroku rake cron手动运行任务,则会抛出该错误。

heroku rake cron

这不起作用。但是,

rake RAILS_ENV=production cron

工作正常(Heroku vs.本地)。

我甚至尝试将我的邮件路径添加到自动加载目录中。

3 个答案:

答案 0 :(得分:1)

我认为在这种情况下,看到您的代码会有所帮助。我在上周末在heroku上实现了同样的确切事情并且没有任何问题。对我来说,我的rake任务在我的模型上调用一个方法就像这样......

 #note this has to be in lib/tasks and be named cron.rake
desc "Send mailing"
 task :cron => :environment do
 Lease.updates
end

我的模型有以下方法......

def self.updates
     //setting up params
      UserMailer.deliver_report_due(user, @leases)
end

这将在您的UserMailer类中调用您的方法的传递。

def report_due(user, leases)
   recipients user.email
   from "email@email.com"
   subject "Confirmation"
   body :leases=>leases,
      :user=>user
end

另请注意,这是rails 2.3,其中您调用UserMailer.deliver_method,在rails 3中我认为它是UserMailer.method_deliver。

如果所有其他方法都失败了,您可以尝试使用'heroku restart'在命令行重新启动heroku应用程序

答案 1 :(得分:1)

Heroku终于弄清楚发生了什么事。我最初创建了名为“Notifier”的Notifier类文件(大写的第一个字母),而不是“notifier”。我意识到错误并手动更改了文件名,但我已经做了git提交。好吧,因为Max OS X对文件名不区分大小写,所以将大小写更改为小写并没有提交git。所以一切都在我的Macbook上本地工作,并显示文件名是正确的,但部署到Heroku推送了一个不正确命名的文件。更糟糕的是,它只受到耙子任务的影响。

如果没有Heroku,我认为我不会想到这一点。

答案 2 :(得分:0)

尝试写

require 'notifier'
rake任务文件中的