Ruby on Rails - 耙子任务中未定义的局部变量或方法



我已经为邮件程序创建了一个耙子任务,以便稍后安排Crontab并使用Gem When自动发送电子邮件给用户。有一段时间只是一个测试,以了解任务是否有效。

我的耙子任务和邮件如下。

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

有人知道发生了什么吗?我在这里错过了什么?

因为错误表明您没有定义User

您需要输入电子邮件 ID 或用户的 ID,并且需要从数据库中查找用户,然后将其传递给函数。

如下所示:

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']

由于它是一个调度程序任务,您可能不希望为每个任务传递变量,而是希望执行一些数据库查询来查找相关用户。但这只是为了演示错误的修复。

最新更新