每当 gem 不会自动 运行?
whenever gem not automatically running?
我有三个任务。每个都使用 heroku run rake challenges:"name of rake" --trace
Running rake challenges:challenge_accomplished --trace on livetochallenge... up, run.3478
** Invoke challenges:challenge_accomplished (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute challenges:challenge_accomplished
Anthony-Gallis-MacBook-Pro:livetochallenge galli01anthony$ heroku run rake challenges:challenge_clear_deadline --trace
Running rake challenges:challenge_clear_deadline --trace on livetochallenge... up, run.2956
** Invoke challenges:challenge_clear_deadline (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute challenges:challenge_clear_deadline
Anthony-Gallis-MacBook-Pro:livetochallenge galli01anthony$ heroku run rake challenges:challenge_reminder --trace
Running rake challenges:challenge_reminder --trace on livetochallenge... up, run.9671
** Invoke challenges:challenge_reminder (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute challenges:challenge_reminder
Rendered user_mailer/challenge_reminder.html.erb within layouts/mailer (213.7ms)
但它们不会在指定时间自动触发。怎么可能?
app/lib/tasks/accomplished.rake
namespace :challenges do
desc 'Make completed habit challenges become past & accomplished'
task challenge_accomplished: :environment do
Challenge.all.each do |challenge|
if challenge.date_started != nil
if challenge.days_left_challenged <= 0
challenge.update_attributes(deadline: :date_started, accomplished: true, send_email: nil)
end
end
end
end
end
app/lib/tasks/clear_deadline.rake
namespace :challenges do
desc 'Removes :deadline from present habit challenges'
task challenge_clear_deadline: :environment do
Challenge.all.each do |challenge|
if challenge.date_started == Date.current
challenge.update_attributes(deadline: nil, accomplished: false)
end
end
end
end
app/lib/tasks/reminder.rake
namespace :challenges do
desc 'Send email to users who want challenge reminder'
task challenge_reminder: :environment do
Challenge.all.each do |challenge|
if challenge.send_email[Date.current.wday] == Date::ABBR_DAYNAMES[Date.current.wday].downcase
UserMailer.challenge_reminder(challenge).deliver_now
end
end
end
end
gemfile
gem 'whenever', :require => false
这是一个命名空间:
namespace :challenges do
到运行你运行rake challenges:challenge_reminder
(或其他)的任务,而不是像你没有把它放在命名空间中那样只是rake challenge_reminder
。您也可以只删除名称空间(这就是我可能会做的)。如果保留名称空间,则需要向调度程序提供以下信息:rake challenges:challenge_reminder
您不需要 whenever
到 运行 heroku 调度程序上的任务。每当或另一个 cron 作业将替代计划的 rake 任务。也就是说,如果您试图安排一个工作人员或其他东西而不是 运行 通过 heroku 调度程序安排一个预定的 rake 任务。
我有三个任务。每个都使用 heroku run rake challenges:"name of rake" --trace
Running rake challenges:challenge_accomplished --trace on livetochallenge... up, run.3478
** Invoke challenges:challenge_accomplished (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute challenges:challenge_accomplished
Anthony-Gallis-MacBook-Pro:livetochallenge galli01anthony$ heroku run rake challenges:challenge_clear_deadline --trace
Running rake challenges:challenge_clear_deadline --trace on livetochallenge... up, run.2956
** Invoke challenges:challenge_clear_deadline (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute challenges:challenge_clear_deadline
Anthony-Gallis-MacBook-Pro:livetochallenge galli01anthony$ heroku run rake challenges:challenge_reminder --trace
Running rake challenges:challenge_reminder --trace on livetochallenge... up, run.9671
** Invoke challenges:challenge_reminder (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute challenges:challenge_reminder
Rendered user_mailer/challenge_reminder.html.erb within layouts/mailer (213.7ms)
但它们不会在指定时间自动触发。怎么可能?
app/lib/tasks/accomplished.rake
namespace :challenges do
desc 'Make completed habit challenges become past & accomplished'
task challenge_accomplished: :environment do
Challenge.all.each do |challenge|
if challenge.date_started != nil
if challenge.days_left_challenged <= 0
challenge.update_attributes(deadline: :date_started, accomplished: true, send_email: nil)
end
end
end
end
end
app/lib/tasks/clear_deadline.rake
namespace :challenges do
desc 'Removes :deadline from present habit challenges'
task challenge_clear_deadline: :environment do
Challenge.all.each do |challenge|
if challenge.date_started == Date.current
challenge.update_attributes(deadline: nil, accomplished: false)
end
end
end
end
app/lib/tasks/reminder.rake
namespace :challenges do
desc 'Send email to users who want challenge reminder'
task challenge_reminder: :environment do
Challenge.all.each do |challenge|
if challenge.send_email[Date.current.wday] == Date::ABBR_DAYNAMES[Date.current.wday].downcase
UserMailer.challenge_reminder(challenge).deliver_now
end
end
end
end
gemfile
gem 'whenever', :require => false
这是一个命名空间:
namespace :challenges do
到运行你运行rake challenges:challenge_reminder
(或其他)的任务,而不是像你没有把它放在命名空间中那样只是rake challenge_reminder
。您也可以只删除名称空间(这就是我可能会做的)。如果保留名称空间,则需要向调度程序提供以下信息:rake challenges:challenge_reminder
您不需要 whenever
到 运行 heroku 调度程序上的任务。每当或另一个 cron 作业将替代计划的 rake 任务。也就是说,如果您试图安排一个工作人员或其他东西而不是 运行 通过 heroku 调度程序安排一个预定的 rake 任务。