Ruby on Rails - rake 任务中未定义的局部变量或方法
Ruby on Rails - undefined local variable or method in rake task
我已经为 Mailer 创建了一个 Rake 任务,以便稍后使用 Crontab 进行调度,并使用 Gem 自动执行,以便向用户发送电子邮件。暂时只是一个测试,以了解任务是否正常工作。
我的 Rake 任务和邮件程序如下。
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']
由于它是一个调度程序任务,您可能不想为每个任务传递一个变量,而是希望执行一些数据库查询以查找相关用户。但这只是为了演示错误的修复。
我已经为 Mailer 创建了一个 Rake 任务,以便稍后使用 Crontab 进行调度,并使用 Gem 自动执行,以便向用户发送电子邮件。暂时只是一个测试,以了解任务是否正常工作。
我的 Rake 任务和邮件程序如下。
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']
由于它是一个调度程序任务,您可能不想为每个任务传递一个变量,而是希望执行一些数据库查询以查找相关用户。但这只是为了演示错误的修复。