views:

73

answers:

1

Hi,

I'm trying to do the following:

  1. Run a Worker and a method within it every 15 minutes
  2. Have a log of the job last runtime, in the database table bdrd_job_queue.

What I've done:

I have a schedule every 15 minutes in my backgroundRB.yml file

The method call has a persistent_job.finish! call, but it's not working, because the persistent_job object is nil.

How can I ensure it's logged in the DB, but still automatically scheduled from backgroundRB.yml?

A: 

I was finally able to do it.

The workaround is to schedule a task that will queue it to the database, scheduled to run right away.

In your worker ...

class NotificationWorker < BackgrounDRb::MetaWorker
  set_worker_name :notification_worker

  def create(args = nil)
  end

  def queue_notify_changes(args = nil)
    BdrbJobQueue.insert_job(:worker_name => 'notification_worker',
                            :worker_method => 'notify_new_changes_DAEMON',
                            :args => 'hello_world',
                            :scheduled_at => Time.now.utc,
                            :job_key => 'email_changes_notification_task')
  end
  def notify_new_changes_DAEMON
     #Do Incredibly cool stuff here
  end

In the config file backgroundrb.yml

--- 
:backgroundrb: 
  :ip: 0.0.0.0
  :port: 11006
  :environment: production
  :log: foreground
  :debug_log: true
  :persistent_disabled: false
  :persistent_delay: 10

:schedules:
  :notification_worker:
    :queue_notify_changes:
      :trigger_args: 0 0 0 * * *