Ruby on Rails - неопределенная локальная переменная или метод в задаче rake - PullRequest
0 голосов
/ 01 июня 2018

Я создал задачу Rake для почтовой программы, которая позже запланирована с помощью Crontab и автоматизирована с Gem Whenever для отправки электронного письма пользователям.Какое-то время это просто проверка, чтобы узнать, работает ли задача.

Моя задача Rake Task and Mailer выглядит следующим образом.

require 'rake'

desc 'send digest email'
task send_warn_course: :environment do
  MailCourseWarnMailer.course_available(user).deliver!
end

# And my Mailer is:
class MailCourseWarnMailer < ActionMailer::Base

  def course_available(user)
    @user = user
    mail(to: @user.email, subject: "Curso disponível")
  end

end

Я передал параметры задаче, но это не работает,Когда я запускаю rake send_warn_course, я получаю сообщение об ошибке:

rake send_warn_course
rake aborted!
NameError: undefined local variable or method `user' for main:Object

Кто-нибудь знает, что происходит?Что я здесь упустил?

1 Ответ

0 голосов
/ 01 июня 2018

Поскольку ошибка предполагает, что вы не определили User.

Вам необходимо ввести идентификатор электронной почты или идентификатор пользователя и найти пользователя из базы данных, а затем передать его функции.

Что-то вроде следующего:

require 'rake'

desc 'send digest email'
task :send_warn_course, [:user_email] => :environment do |t, args|
  user = User.find_by_email args[:user_email]
  MailCourseWarnMailer.course_available(user).deliver!
end

# And my Mailer is:
class MailCourseWarnMailer < ActionMailer::Base

  def course_available(user)
    @user = user
    mail(to: @user.email, subject: "Curso disponível")
  end

end

Затем вы можете запустить задачу следующим образом:

rake send_warn_course['user@email.com']

Поскольку это задача планировщика, вы можете ее не выполнятьпередать переменную с каждой задачей и вместо этого хотел бы выполнить некоторые запросы к базе данных, чтобы найти соответствующих пользователей.Но это было только для того, чтобы продемонстрировать исправление ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...