【问题标题】:whenever gem not automatically running?每当gem没有自动运行?
【发布时间】:2016-03-17 19:30:53
【问题描述】:

我有三个任务。每个都使用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

宝石文件

gem 'whenever', :require => false

【问题讨论】:

  • 您没有在 heroku 调度程序中包含命名空间。还有——你用whenever做什么?如果您使用 heroku 调度程序(显然是这样),则不需要它来运行 rake 任务。

标签: ruby-on-rails ruby heroku rubygems whenever


【解决方案1】:

这是一个命名空间:

namespace :challenges do

要运行您运行rake challenges:challenge_reminder(或其他)的任务,而不仅仅是rake challenge_reminder,就像您没有将它放在命名空间中一样。您也可以只删除命名空间(我可能会这样做)。如果您保留命名空间,则需要向调度程序提供以下内容:rake challenges:challenge_reminder

您不需要whenever 在heroku 调度程序上运行任务。每当或另一个 cron 作业将替代计划的 rake 任务。也就是说,如果您尝试调度工作人员或其他东西,而不是通过 heroku 调度程序运行已调度的 rake 任务。

【讨论】:

    猜你喜欢
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 2016-01-16
    • 2017-04-26
    • 2015-10-04
    • 2017-03-04
    相关资源
    最近更新 更多