# Sweatshop Sweatshop provides an api to background resource intensive tasks. Much of the api design was copied from Workling, with a few tweaks. Currently, it runs rabbitmq and kestrel, but it can support any number of queues. ## Installing gem install sweatshop freeze in your gems directory (add config.gem 'sweatshop' to your environment) cd vendor/gems/sweatshop rake setup ## Writing workers Put `email_worker.rb` into app/workers and sublcass `Sweatshop::Worker`: class EmailWorker < Sweatshop::Worker def send_mail(to) user = User.find_by_id(to) Mailer.deliver_welcome(to) end end Then, anywhere in your app you can execute: EmailWorker.async_send_mail(1) The `async` signifies that this task will be placed on a queue to be serviced by the EmailWorker possibly on another machine. You can also call: EmailWorker.send_mail(1) That will do the work immediately, without placing the task on the queue. You can also define a `queue_group` at the top of the file which will allow you to split workers out into logical groups. This is important if you have various machines serving different queues. ## Running the queue Sweatshop has been tested with Rabbit and Kestrel, but it will also work with Starling. Please use the following resources to install the server: Kestrel: http://github.com/robey/kestrel/tree/master Rabbit: http://github.com/ezmobius/nanite/tree/master config/sweatshop.yml specifies the machine address of the queue (default localhost:5672). You can also specify the queue type with the queue param. ## Rabbit cluster support The following example configuration shows support for Rabbit clusters within a queue group: default: queue: rabbit cluster: - hostA:5672 - hostB:5672 user: 'guest' pass: 'guest' vhost: '/' enable: true Sweatshop will attempt to connect to each server listed under "cluster" in order, until it either manages to establish a connection or until it runs out of servers. If you only have a single Rabbit server, you can omit the "cluster" option and just add "host" and "port" (or host: localhost:5672) options, as shown below: default: queue: rabbit host: localhost port: 5672 user: 'guest' pass: 'guest' vhost: '/' enable: true ## Running the workers Assuming you ran `rake setup` in Rails, you can type: script/sweatshop By default, the script will run all workers defined in the app/workers dir. Every task will be processed on each queue using a round-robin algorithm. You can also add the `-d` flag which will put the worker in daemon mode. The daemon also takes other params. Add a `-h` for more details. script/sweatshop -d script/sweatshop -d stop If you would like to run Sweatshop as a daemon on a linux machine, use the initd.sh script provided in the sweatshop/script dir. # REQUIREMENTS memcache (for kestrel) carrot (for rabbit) # LICENSE Copyright (c) 2009 Amos Elliston, Geni.com; Published under The MIT License, see License