Scheduling in Ruby on Rails

Hi all,

I hope someone can point me in the right direction. I am looking for some sample code to help with writing some code for scheduling maintenance for machinery. The idea is that, like a car, this machinery needs maintenance either at certain intervals or after a certain number of hours of use (whichever is sooner). I am not sure how best to manage the time measurements (DateTime or Time?) or how to build the business rules to do the measurements and comparisons robustly.

I wondered whether anyone here could direct me to an example.

Thanks,

Ian.

it all depends on your machine. nobody can tell you what's right (or even the best) for you. you gotta decide for yourself.

to show you some alternatives: - you could just work with cron-jobs. - you could use backgrounDRb or workling/starling to schedule your own processes.

I am not sure how best to manage the time measurements (DateTime or Time?) or how to build the business rules to do the measurements and comparisons robustly.

I wondered whether anyone here could direct me to an example.

If you don't need increments smaller than 1 day, I prefer to use the Date class. I find it easier than Time to work with: * no ambiguity over "now" being a different date in different time zones etc * easier to compare date_1 == date_2

  http://ruby-doc.org/stdlib/libdoc/date/rdoc/classes/Date.html

A few simplistic examples:

date = Date.today

=> Mon, 02 Mar 2009

next_month = date + 1.month

=> Thu, 02 Apr 2009

date = Date.new 2009,01,31

=> Sat, 31 Jan 2009

next_month = date + 1.month

=> Sat, 28 Feb 2009 # automatic rounding down to valid date

date = Date.new 2008,02,29

=> Fri, 29 Feb 2008

next_year = date + 1.year

=> Sat, 28 Feb 2009 # automatic rounding down to valid date

four_years_later = date + 4.year

=> Wed, 29 Feb 2012

Always be careful with comparing dates near the end of the months as months have a variable length.

Easier comparison of date_1 == date_2 (compared to time_1 == time_2)

date_1 = Date.today

=> Mon, 02 Mar 2009

date_2 = Date.today

=> Mon, 02 Mar 2009

date_1 == date_2

=> true

time_1 = Time.now

=> Mon Mar 02 11:24:59 +0100 2009

time_2 = Time.now

=> Mon Mar 02 11:25:06 +0100 2009

time_1 == time_2

=> false

HTH,

Peter

Thanks Peter,

Those are good examples. You mention using Date for increments that are not smaller than one day. In fact my situation is a hybrid, since the machinery may be running at intervals over several days (so I would need to track a usage event that spans days) but I need to record the total number of hours of use during that time. From what I can see the DateTime class allows for this. I suppose what I am really asking here is under what circumstances would I use the Time class: using DateTime always gives me more information doesn't it?

Ian.