我无法 reminder.rake 在制作中工作。我收到了错误。
namespace :challenges do
desc 'Send email to users with challenges who want reminder'
task challenge_reminder: :environment do
self.all.each do |challenge|
UserMailer.challenge_reminder(self).deliver_now # Tried (challenge) instead of (self), same error too
end
end
end
heroku调度程序
跟踪错误
Anthony-Gallis-MacBook-Pro:livetochallenge galli01anthony$ heroku run rake challenges:challenge_reminder --trace
Running rake challenges:challenge_reminder --trace on livetochallenge... up, run.7666
rake aborted!
NoMethodError: undefined method `all' for main:Object
/app/lib/tasks/reminder.rake:4:in `block (2 levels) in <top (required)>'
Tasks: TOP => challenges:challenge_reminder
(See full trace by running task with --trace)
Anthony-Gallis-MacBook-Pro:livetochallenge galli01anthony$
作为一个示例我已经完成了以下工作,所以我知道设置 whenever gem 或heroku调度程序不是问题:
namespace :challenges do
desc 'Clean the challenge freebies and freebie_dates'
task clean: :environment do
Challenge.update_all(freebie: 0, freebie_date: nil)
end
end
答案 0 :(得分:1)
根据跟踪,看起来文件/app/lib/tasks/clear_deadline.rake
的第4行指的是rake
,这就是它失败的原因。
查看文件内容,或提供该文件的代码。
答案 1 :(得分:1)
您的Rake任务存在问题:
task challenge_reminder: :environment do
self.all.each do |challenge|
UserMailer.challenge_reminder(self).deliver_now
end
end
此处self
指的是Rake任务上下文,而不是此代码所源自的模型。你还需要对challenge
做一些事情,或者检索它没有意义。
建议修复:
task challenge_reminder: :environment do
Challenge.all.each do |challenge|
UserMailer.challenge_reminder(challenge).deliver_now
end
end
请记住,在具有大量记录的模型上调用.all
可能会占用大量内存,如果它太大,可能会使服务器崩溃,因为Rails会将每条记录加载到内存中。如果你有数百万的那些,你可能会吐司。
在尝试追溯问题时,请先查看错误中引用的行,然后从那里开始工作。 Ruby的堆栈跟踪通常足以解决问题的根源。