The GitHub guys recently released their background processing app which uses Redis: http://github.com/defunkt/resque http://github.com/blog/542-introducing-resque
I have it working locally, but I'm struggling to get it working in production. Has anyone got a:
- Capistrano recipe to deploy workers (control number of workers, restarting them, etc)
- Deployed workers to separate machine(s) from where the main app is running, what settings were needed here?
- gotten redis to survive a reboot on the server (I tried putting it in cron but no luck)
- how did you work resque-web (their excellent monitoring app) into your deploy?
Thanks!
P.S. I posted an issue on Github about this but no response yet. Hoping some SO gurus can help on this one as I'm not very experienced in deployments. Thank you!
Garrett's answer really helped, just wanted to post a few more details. It took a lot of tinkering to get it right...
I'm using passenger also, but nginx instead of apache.
First, don't forget you need to install sinatra, this threw me for a while.
sudo gem install sinatra
Then you need to make a directory for the thing to run, and it has to have a public and tmp folder. They can be empty but the problem is that git won't save an empty directory in the repo. The directory has to have at least one file in it, so I made some junk files as placeholders. This is a weird feature/bug in git.
I'm using the resque plugin, so I made the directory there (where the default config.ru is). It looks like Garrett made a new 'resque' directory in his rails_root. Either one should work. For me...
Then I edited
MY_RAILS_APP/vendor/plugins/resque/config.ru
so it looks like this:Don't forget to change
ADD_SOME_PASSWORD_HERE
to the password you want to use to protect the app.Finally, I'm using Nginx so here is what I added to my nginx.conf
And so it gets restarted on your deploys, probably something like this in your deploy.rb
I'm not really sure if this is the best way, I've never setup rack/sinatra apps before. But it works.
This is just to get the monitoring app going. Next I need to figure out the god part.
I'm a little late to the party, but thought I'd post what worked for me. Essentially, I have god setup to monitor redis and resque. If they aren't running anymore, god starts them back up. Then, I have a rake task that gets run after a capistrano deploy that quits my resque workers. Once the workers are quit, god will start new workers up so that they're running the latest codebase.
Here is my full writeup of how I use resque in production:
http://thomasmango.com/2010/05/27/resque-in-production
I just figured this out last night, for Capistrano you should use san_juan, then I like the use of God to manage deployment of workers. As for surviving a reboot, I am not sure, but I reboot every 6 months so I am not too worried.
Although he suggest different ways of starting it, this is what worked easiest for me. (Within your deploy.rb)
To manage where it runs, on another server, etc, he covers that in the configuration section of the
README
.I use Passenger on my slice, so it was relatively easy, I just needed to have a
config.ru
file like so:For my VirtualHost file I have:
Also, a quick note. Make sure you overide the
resque:setup
rake task, it will save you lots of time for spawning new workers with God.I ran into a lot of trouble, so if you need any more help, just post a comment.
Use these steps instead of making configuration with web server level and editing plugin:
https://gist.github.com/1060167