2011-02-27 66 views
1

我有一个rake任务,通过ActionMailer发送每日邮件。我的计划是使用Heroku的cron作业每晚执行此任务。Heroku耙任务不加载ActionMailer类

问题是我的ActionMailer类(通知程序)不被Heroku识别。具体错误是“单位化常量通知程序”。但是,Notifier类在应用程序(控制器和模型)中的其他地方正确发送Heroku中的电子邮件,而不是从rake任务中发出。运行耙子任务也确实本地工作。

如果我用heroku rake cron手动运行任务,它会引发该错误。

heroku rake cron 

这是行不通的。但是,

rake RAILS_ENV=production cron 

工作正常(Heroku与本地)。

我甚至尝试将我的邮件路径添加到autoload目录。

回答

1

的Heroku终于想通了什么事情在命令行上重新启动的Heroku应用程序。我最初创建了名为“Notifier”(首字母大写)的Notifier类文件,而不是“notifier”。我意识到错误并手动更改了文件名,但是我已经做了一次git commit。那么因为Max OS X对文件名不区分大小写,所以将大小写更改为小写不会影响git。所以一切工作在我的Macbook本地,并显示文件名是正确的,但部署到Heroku推送一个不正确的命名文件。更糟糕的是,它只是在rake任务下受到影响。

我不认为我会想到没有Heroku的情况下。

1

我认为在这种情况下看到你的代码会有帮助。我上周末在heroku上执行了同样的事情,没有任何问题。对我来说,我的耙子任务呼吁我的模型像这样的方法......

#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 protected]" 
    subject "Confirmation" 
    body :leases=>leases, 
     :user=>user 
end 

另外请注意,这是轨道2.3中,你叫UserMailer.deliver_method,在Rails 3我认为这是UserMailer.method_deliver。

如果一切都失败了,你可以尝试用“Heroku的重启”

0

尝试写

require 'notifier' 

在耙任务文件