1

私は Rails の初心者で、初めて Heroku Scheduler を使用して Rails アプリケーションで定期的なタスクを実行したいと考えています。チュートリアルでアドバイスされているように、次の rake タスクを /lib/tasks/scheduler.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_resultsを使用してスケジュールを設定します。rails runner Cup.update_game_dates

その過程であなたのコードを少し最適化しました。質問があれば聞いてください。

于 2012-09-24T20:28:25.853 に答える