我有一个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.本地)。
我甚至尝试将我的邮件路径添加到自动加载目录中。
答案 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任务文件中的