Hi Ramon,

I'm also new to BGRB but I had a similar problem only very recently and I think a variation of my solution might help you. Here is my idea for you (thanks mostly to a even guidance of Hemant himself):

class MailWorker < BackgrounDRb::MetaWorker
  set_worker_name :mail_worker
  def create(args = nil)
    # this method is called, when worker is loaded for the first time
  end

  def create(args = nil)
   @mail_queue = []
# double check that add_periodic_timer() accepts seconds - if so, 3600 is one hour.
   add_periodic_timer(3600) { push_mail() }
  end

  def add_mail(args = nil)
# PS. this method submitted by Hemant, I haven't looked into the Struct stuff.
    klass = Struct.new(:cmd_args)
    # add mail to the queue
    @mail_queue << klass.new(args)
  end

  def push_mail
sleep 10 # I think this is important to make sure that we have definitely gone over an hour since the last push!

# loop through the first 250 !NOTE: must specify a concrete range as it is possible that new mails are being queued while this methods runs.
      task = @mail_queue.shift
      # send mail here
    # end loop
  end

  def check_count
     return @mail_queue.count
  end
end

You can even add a "is_busy" flag of some sort to make absolutely sure this doesn't get run twice at the same time. One scenario (if its at all possible) is that there is a huge delay in the sending of mail, meaning the process will lap over the hour. All sorts of bad things could go wrong I suspect.


Anyway, thanks primarily to Hemants' help I hope this helps you too.

Cheers,
Chad.


On 27 Jan 2009, at 09:14, Ramon Tayag wrote:

Hey everyone,

PROBLEM
I need some backgroundrb help.  I have a Rails app that connects to an
SMTP server that can only send up to 250 emails per hour.  If I try to
send the 251st email, it will just ignore it.

SENDMAIL?
I almost bashed my head trying to setup sendmail so I can send my own
emails, but not all emails were being sent.

FANCY BDRB STUFF
Looking at http://backgroundrb.rubyforge.org/scheduling/ , I can see
that there are many things I can do with backgroundrb, but I can't
seem to figure out how to do what's written on the subject.

I basically want to send up to 250 emails immediately, and queue the
251st email til after the next hour since the max limit of 250 will be
reset.  Is this possible with backgroundrb?

Thanks,
Ramon Tayag
_______________________________________________
Backgroundrb-devel mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/backgroundrb-devel

_______________________________________________
Backgroundrb-devel mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/backgroundrb-devel

Reply via email to