Задача rake Heroku не загружает класс ActionMailer

У меня есть задача rake, которая доставляет ежедневные электронные письма через ActionMailer. Мой план состоит в том, чтобы использовать задание cron Heroku для запуска этой задачи каждую ночь.

Проблема в том, что мой класс ActionMailer (Notifier) ​​не распознается Heroku. Конкретная ошибка: «Унифицированный константный уведомитель». Однако класс Notifier правильно отправляет электронные письма в Heroku везде в приложении (контроллеры и модели), но не из задачи rake. Запуск задачи rake также работает локально.

Если я делаю heroku rake cron для запуска задачи вручную, он выдает эту ошибку.

heroku rake cron

Это не работает. Тем не мение,

rake RAILS_ENV=production cron

отлично работает (Heroku против местного).

Я даже пытался добавить свой путь к почтовой программе в каталог автозагрузки.


person Sean Coleman    schedule 27.02.2011    source источник


Ответы (3)


Я думаю, что в этом случае будет полезно увидеть ваш код. Я реализовал то же самое в прошлые выходные на героку, и у меня не было проблем. Для меня моя задача 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 protected]"
   subject "Confirmation"
   body :leases=>leases,
      :user=>user
end

Также обратите внимание, что это рельсы 2.3, в которых вы вызываете UserMailer.deliver_method, в рельсах 3 я думаю, что это UserMailer.method_deliver.

Если ничего не помогает, вы можете попробовать перезапустить приложение heroku в командной строке с помощью «перезагрузки heroku».

person Rick Schmidt    schedule 01.03.2011

Наконец-то Героку понял, что происходит. Первоначально я создал файл класса Notifier с именем «Notifier» (первая буква с заглавной буквы) вместо «notifier». Я понял ошибку и вручную изменил имя файла, однако я уже сделал коммит git. Что ж, поскольку Max OS X нечувствительна к регистру для имен файлов, изменение регистра на нижний регистр не связано с git. Таким образом, все работало локально на моем Macbook и показывало, что имя файла было правильным, но при развертывании в Heroku выталкивался файл с неправильным именем. Еще хуже то, что это было затронуто только под задачами rake.

Я не думаю, что когда-либо понял бы это без Heroku.

person Sean Coleman    schedule 02.03.2011

Попробуйте написать

require 'notifier'

в вашем файле задачи rake

person Arugin    schedule 22.12.2013