【问题标题】:Heroku rake task not loading ActionMailer classHeroku rake 任务未加载 ActionMailer 类
【发布时间】:2011-07-05 01:58:20
【问题描述】:

我有一个通过 ActionMailer 发送每日电子邮件的 rake 任务。我的计划是使用 Heroku 的 cron 作业每晚运行这个任务。

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

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

heroku rake cron

这不起作用。不过,

rake RAILS_ENV=production cron

工作正常(Heroku 与本地)。

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

【问题讨论】:

    标签: ruby-on-rails heroku actionmailer


    【解决方案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
    

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

    如果一切都失败了,您可以尝试在命令行中使用“heroku restart”重新启动您的 heroku 应用

    【讨论】:

      【解决方案2】:

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

      如果没有 Heroku,我想我永远也无法解决这个问题。

      【讨论】:

        【解决方案3】:

        试着写

        require 'notifier'
        

        在您的 rake 任务文件中

        【讨论】:

          猜你喜欢
          • 2016-11-17
          • 1970-01-01
          • 1970-01-01
          • 2011-12-03
          • 2012-09-16
          • 2013-03-04
          • 1970-01-01
          • 2019-12-18
          • 2022-08-15
          相关资源
          最近更新 更多