NoMethodError: undefined method ' ' for main:Object - whenever scheduler
NoMethodError: undefined method ' ' for main:Object - whenever scheduler
我无法让 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
根据跟踪,看起来文件 /app/lib/tasks/clear_deadline.rake
的第 4 行指的是 rake
,这就是失败的原因。
查看文件内容,或提供该文件的代码。
你的 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 的堆栈跟踪通常足够具体,足以找到问题的根源。
我无法让 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
根据跟踪,看起来文件 /app/lib/tasks/clear_deadline.rake
的第 4 行指的是 rake
,这就是失败的原因。
查看文件内容,或提供该文件的代码。
你的 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 的堆栈跟踪通常足够具体,足以找到问题的根源。