[Backgroundrb-devel] Scheduling same worker/method at different times with different args
Meng Kuan
mengkuan at gmail.com
Mon Jan 28 21:34:00 EST 2008
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
More information about the Backgroundrb-devel
mailing list