1

我是 Rails 的新手,我第一次想使用 Heroku Scheduler 在我的 Rails 应用程序中运行定期任务。按照教程中的建议,我在 /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 似乎无法访问数据库,因此无法恢复它可以执行方法的对象。

任何人的想法?

4

1 回答 1

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

我在此过程中对您的代码进行了一些优化,如果您有任何问题,请随时询问。

于 2012-09-24T20:28:25.853 回答