2

時計仕掛けでカスタム コードを実行する方法を理解しようとしています。これは、lib/clock.rbHeroku がその devcenter ドキュメントで使用するサンプル ファイルです。

require File.expand_path('../../config/boot',        __FILE__)
require File.expand_path('../../config/environment', __FILE__)
require 'clockwork'

include Clockwork

every(4.minutes, 'Queueing interval job') { Delayed::Job.enqueue IntervalJob.new }
every(1.day, 'Queueing scheduled job', :at => '14:17') { Delayed::Job.enqueue ScheduledJob.new }

IntervalJob と ScheduledJob とは何ですか? これらのファイルはどこにあるはずですか? データベース レコードにアクセスできる独自のカスタム ジョブを実行したいと考えています。

編集

これは私の/lib/clock.rb

require 'clockwork'
require './config/boot'
require './config/environment'

module Clockwork

  handler do |job|
    puts "Running #{job}"
  end

  every(2.minutes, 'Filtering Streams') { Delayed::Job.enqueue FilterJob.new}
end

これは私の/lib/filter_job.rb

  class FilterJob
    def perform
      @streams = Stream.all

      @streams.each do |stream|
      # manipulating stream properties
      end
    end
   end

エラーが発生します:

uninitialized constant Clockwork::FilterJob (NameError)
/app/lib/clock.rb:11:in `block in <module:Clockwork>'
4

2 に答える 2

5

次のことを行う必要があります。

まず、clockwork gem をインストールします。

lib フォルダーに clock.rb を作成します。

require 'clockwork'
require './config/boot'
require './config/environment'

module Clockwork

  handler do |job|
    puts "Running #{job}"
  end

  every(1.day, 'Creating Cycle', :at => '22:00') { Delayed::Job.enqueue CyclePlannerJob.new}
end

この例では、提供された IntervalJob と ScheduledJob は遅延ジョブです。クロックワークは、指定された時間にそれらをトリガーします。CyclePlannerJob を呼び出しています。これが私のファイルの外観です。lib/cycle_planner_job.rb

class CyclePlannerJob
  def perform
    CyclePlanner.all.each do |planner|
      if Time.now.in_time_zone("Eastern Time (US & Canada)").to_date.send("#{planner.start_day.downcase}?")
        planner.create_cycle
      end
    end
  end
end

私の例では、毎日午後 10 時に、セットアップした遅延ジョブを実行する CyclePlanner ジョブを実行しています。Heroku の例に似ています。これを使用するには、ダッシュボードで Heroku アプリのクロック動作と遅延ジョブをセットアップする必要があることに注意してください。また、Profile は次のようになります。

worker:  bundle exec rake jobs:work
clock: bundle exec clockwork lib/clock.rb

ご不明な点がございましたら、お気軽にお問い合わせください。必要に応じて、さらに詳しく説明いたします。

于 2014-07-19T14:46:57.397 に答える
1

名前空間の問題のようです。filter_job.rb を models ディレクトリに移動して試してください。

于 2014-08-01T14:01:27.780 に答える