我是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似乎无法以某种方式访问数据库,因此不会撤销可以执行方法的对象。
想点什么?
答案 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_results
和rails runner Cup.update_game_dates
。
我在这个过程中优化了您的代码,如果您有任何问题,请随时提出。