1

I have three tasks. Each one works upon using 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)

But they don't automatically trigger upon the appointed hour. How can that be?

enter image description here

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
AnthonyGalli.com
  • 2,796
  • 5
  • 31
  • 80
  • you didn't include the namespace on the heroku scheduler. also--what are you using `whenever` for? you don't need it to run the rake tasks if you're using heroku scheduler (as you apparently are). – toddmetheny Mar 17 '16 at 19:41

1 Answers1

4

this is a namespace:

namespace :challenges do

to run the task you run rake challenges:challenge_reminder (or whatever) rather than just rake challenge_reminder like you could if you hadn't put it inside a namespace. You could also just remove the namespace (which is what I might do). If you keep the namespace, you'll need to feed the scheduler this: rake challenges:challenge_reminder

You don't need whenever to run the tasks on heroku scheduler. Whenever or another cron job would be a replacement for a scheduled rake task. That is, if you were trying to schedule a worker or something instead of running a scheduled rake task via the heroku scheduler.

toddmetheny
  • 4,405
  • 1
  • 22
  • 39