Makes it very easy to create a service-like class that's easy to start and stop, spun off from some work at discovereads.com
Ruby
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib
.gitignore
CHANGELOG
LICENSE
README.rdoc
Rakefile
TODO
VERSION

README.rdoc

acts_as_service

Overview

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.

Limitations:

  • 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

Maintaining acts_as_service

Make sure you have jeweler.

To build:

cd .../acts_as_service
rake gemspec
rake build

To test:

Sorry, little lazy here. Create a sample service class and letter rip!