Heroku Scheduler rake任务中止

时间:2012-09-24 19:42:39

标签: ruby-on-rails-3 heroku rake scheduler

我是Rails的新手,我第一次想使用Heroku Scheduler在我的rails应用程序中运行定期任务。正如Tutorial中所建议的那样,我在/lib/tasks/scheduler.rake中创建了以下rake任务

 desc "This task is called by the Heroku scheduler add-on"
task :auto_results => :environment do
    puts "Updating results..."
    @cups = Cup.all
@cups.each do |cup|
    cup.fix_current_results
end
    puts "done."
end

task :update_game_dates => :environment do
    puts "Updating game dates..."
    @cups = Cup.all
@cups.each do |cup|
    cup.update_game_dates
end
puts "done."
end

任务在我的本地环境中正常运行,但在推送到Heroku并运行任务后,每次中止都会出现以下错误:

rake aborted!
undefined method `name' for nil:NilClass

对我而言,Heroku似乎无法以某种方式访问​​数据库,因此不会撤销可以执行方法的对象。

想点什么?

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

在Cup模型中使用类方法。然后,您可以使用rails runner Cup.my_class_method命令调用它,并在Heroku调度程序中安排它。

# app/models/cup.rb
class Cup < ActiveRecord::Base
  # Your existing code

  ##
  #  Class Methods
  #  that can be run by 'rails runner Cup.my_class_method'
  #  with the Heroku scheduler
  def self.auto_results
    find_each {|cup| cup.fix_current_results}
  end

  def self.update_game_dates
    find_each {|cup| cup.update_game_dates}
  end
end

然后使用Heroku调度程序安排rails runner Cup.auto_resultsrails runner Cup.update_game_dates

我在这个过程中优化了您的代码,如果您有任何问题,请随时提出。