[Backgroundrb-devel] Scheduling same worker/method at different times with different args

hemant gethemant at gmail.com
Mon Jan 28 22:50:33 EST 2008


On Tue, Jan 29, 2008 at 8:04 AM, Meng Kuan <mengkuan at gmail.com> wrote:
>
>
>  On 29 Jan 2008, at 4:15 AM, hemant wrote:
>
>  > On Tue, Jan 29, 2008 at 1:02 AM, Scott Ward <scott at shefield.com>
>  > wrote:
>  >> I need to run the same worker's method twice per day with different
>  >>  arguments.  Unfortunately, only the second entry in the schedule
>  >> is firing.
>  >>
>  >>  I created an experimental worker to verify this:
>  >>
>  >>  Worker:
>  >>  class ExperimentWorker < BackgrounDRb::MetaWorker
>  >>   set_worker_name :experiment_worker
>  >>   def create(args = nil)
>  >>     # this method is called, when worker is loaded for the first time
>  >>   end
>  >>
>  >>   def experiment(args = {})
>  >>     logger.info "#{Time.now} - Experiment fired at #{args
>  >> [:repeat_second]}
>  >>  second mark."
>  >>   end
>  >>  end
>  >>
>  >>
>  >>  In backgroundrb.yml:
>  >>  :schedules:
>  >>   :experiment_worker:
>  >>     :experiment:
>  >>       :trigger_args: "0 * * * * * *"
>  >>       :data:
>  >>         :repeat_second: zero
>  >>     :experiment:
>  >>       :trigger_args: "30 * * * * * *"
>  >>       :data:
>  >>         :repeat_second: thirty
>  >>
>  >>
>  >>  In the log, I only see "Experiment fired at thirty second mark."
>  >> Why isn't
>  >>  the first entry for experiment worker firing?  Perhaps, I have
>  >> this set up
>  >>  wrong?
>  >
>  >
>  > Because it needs different method names for such a firing. As you
>  > might have noticed, currently you have two values with same key in
>  > configuration file.
>  >
>
>  You can try using alias_method to get a different method name:
>
>    alias_method :experiment2, :experiment
>
>  Note: the alias_method call should come _after_ the actual
>  "experiment" method definition.
>
>
>  Then your backgroundrb.yml becomes:
>
>
>   :schedules:
>    :experiment_worker:
>      :experiment:
>        :trigger_args: "0 * * * * * *"
>        :data:
>          :repeat_second: zero
>      :experiment2:
>
>        :trigger_args: "30 * * * * * *"
>        :data:
>          :repeat_second: thirty
>

There is a patch by Andy, in trac for enabling this kind of behaviour,
we can think of applying that.


More information about the Backgroundrb-devel mailing list