A gem that gives you an easy way to make service-like code and spend all your effort on actually writing the code to get your job done.
one process at a time
only been tested while running inside a Rails application (e.g. script/runner MySrv.start). should work if you just specify a pidfile explicitly, but needs a little testing
Allows you to:
start, stop, restart your process
ensures that only one of each process is running on a given machine (if this is not desired, you can probably hack it or enhance to allow up to N instances if you want
implement a method you want called over and over, and when the service is supposed to shut down, it stops calling the method and exits
see what the PID is of the process by inspecting the pidfile
explicitly shutdown the process from within the service class (but you'll still have to return from perform_work_chunk).
initiate shutdown of service externally by either calling MyService.stop or adding 'shutdown' to the PID file.
hooks to execute methods after start or before stop
What to do
require 'acts_as_service' # or add it to your Rails env as a config.gem
class MyService acts_as_service def self.perform_work_chunk # do stuff that returns in a short period (e.g. a few seconds or less) end end
you can get fancier and specify your process identifier and how long to sleep between calls to perform_work_chunk:
class MyService acts_as_service def self.service_name "MyAwesomeService" end def self.sleep_time 5 # seconds end def self.perform_work_chunk # do stuff that returns in a short period (e.g. a few seconds or less) end end
Make sure you have jeweler.
cd .../acts_as_service rake gemspec rake build
Sorry, little lazy here. Create a sample service class and letter rip!