README.md in eycloud-recipe-resque-1.0.3 vs README.md in eycloud-recipe-resque-1.1.0

- old
+ new

@@ -1,18 +1,28 @@ + # Resque recipe for EY Cloud -Resque is a Redis-backed Ruby library for creating background jobs, placing those jobs on multiple queues, and processing them later. +[Resque](https://github.com/defunkt/resque) is a Redis-backed Ruby library for creating background jobs, placing those jobs on multiple queues, and processing them later. -This recipe will setup `resque` on a Solo instance environment or on named Utility instances in a cluster environment. +This recipe will setup Resque on a Solo instance environment or on named Utility instances in a cluster environment. -Name your Utility instances with prefixes: `resque`. For example, `resque`, or `resque123`. Naming them all `resque` works just fine. +## Installation -This recipe assumes that redis is running within the environment. Fortunately, it is. By default EY Cloud runs redis on your `solo` or `db_master` instance. Optionally, this recipe will use a custom `redis` utility instance that you might have in your environment. It's clever like that. +1. Install the recipe +2. Add a deploy hook to restart resque workers after the application restarts +3. Name all utility instances `resque`. -## Installation +```ruby +# deploy/after_restart.rb +on_utilities(:resque) do + node[:applications].each do |app_name, data| + sudo 'echo "sleep 20 && monit -g resque_#{app_name} restart all" | at now' + end +end +``` -## Simple Installation +### Simple Installation To add this recipe to your collection of recipes, or as your first recipe, you can use the helpful `ey-recipes` command line tool: cd myapp gem install engineyard engineyard-recipes @@ -25,11 +35,11 @@ ey-recipes init -d ey-recipes clone git://github.com/engineyard/eycloud-recipe-resque.git -n resque git add .; git commit -m "added delayed job recipe"; git push origin master ey deploy -## Manual Installation +### Manual Installation Clone/copy this repository into a `cookbooks/resque` folder (such that you have a `cookbooks/resque/recipes/default.rb` file). This recipe must be installed as `resque` and not `eycloud-recipe-resque` or anything fancy. Then add the following to `cookbooks/main/recipes/default.rb`: @@ -39,5 +49,70 @@ repository. Then to upload and apply to EY Cloud for a given environment: ey recipes upload --apply -e target-environment + +### Rails 3 + +To ensure that Resque can discover where Redis installed, create a `config/initializers/resque.rb` file: + +```ruby +resque_yml = File.expand_path('../../resque.yml', __FILE__) +if File.exist?(resque_yml) + Resque.redis = YAML.load_file(resque_yml)["redis_uri"] +end +``` + +## How do I get some Resque workers? + +Resque workers can process 1 task/job at a time. + +If you have a solo instance, then one Resque worker is provisioned. + +If you have one or more app instances, then no Resque workers are provisioned. Instead, add dedicated utility instances to provision Resque workers. + +Name your Utility instances `resque`. + +## How many Resque workers will I get? + +All the available memory of an instance is used for Resque workers, with 300Mb set aside for operating system tasks. Resque workers are allocated 300Mb each. + +As above, solo instances of any time have 1 worker. + +For utility instances you get approximately the following number of workers: + +* Small -> 4 workers within 1.7 GB +* Large -> 24 workers within 7.5 GB +* Extra Large -> 49 workers within 15 GB + +* High Memory Extra Large -> 55 workers within 17.1 GB +* High-Memory Double Extra Large -> 113 workers within 34.2 GB +* High-Memory Quadruple Extra Large -> 213 workers within 64.4 GB + +* High-CPU Medium -> 4 workers within 1.7 GB +* High-CPU Extra Large -> 22 workers within 7 GB + +## How do I setup Redis? + +This recipe assumes that Redis is running within the environment. Fortunately, it is. Redis is automatically running on all Engine Yard Cloud environments. + +If you have a dedicate Redis instance called `redis` then this recipe will discover and use that version of Redis. + +## How do I use resque-web? + +In a Rails 3 app, you can access "resque-web" via your normal Rails app using mounted apps. + +As a very simple, moderately secure method, add the following into your `routes.rb` routes: + +```ruby +require "resque/server" +mount Resque::Server.new, :at => "/resque/34257893542" +``` + +For more security, consider the ideas in this [gist](https://gist.github.com/1575082). + +## Helpers + +* `resque_instances` - returns list of instances that have resque running on them +* `resque_instance?` - does this instance have resque running on it? +