Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I create a resque worker automatically at bootup?

Ok, I'm making my first ruby app. Who know moving everything over to 'production' is so fugging complicated. So far I've struggled my way through configuring passenger, getting it to run on startup, then getting redis to run on startup.

My last task is on startup to add 1 worker. Right now, I have to ssh in and run my rake command rake workers:start. Obviously this is no good when I want to close ssh.. so I just dont really know how or what the next step is.

I tried copying resque default config to config.ru and it just blows up Passenger with errors. I also looked into resque-pool which some people mentioned but that is over my head.

all i have to do is add 1 worker on bootup. This isnt that serious of an app so simpler would be best at this point.

like image 334
Tallboy Avatar asked Jan 02 '12 05:01

Tallboy


2 Answers

I don't use the god gem because (1) I've seen a project that was very thrashed by the complexity of setup it introduced, and (2) I'm personally really comfortable with the standard Linux (Ubuntu) tools that handle this kind of thing.

To start the Resque workers on bootup

I have this code in my /etc/rc.local file. I have a deploy user on the system:

# Start Resque
su -l deploy -c "/home/deploy/start-resque-workers"
su -l deploy -c "/home/deploy/start-resque-webui"

Then, in those scripts I set up the ruby environment and run the rake task:

# Load RVM into a shell session *as a function*
if [[ -s "$HOME/.rvm/scripts/rvm" ]] ; then
  # First try to load from a user install
  source "$HOME/.rvm/scripts/rvm"
elif [[ -s "/usr/local/rvm/scripts/rvm" ]] ; then
  # Then try to load from a root install
  source "/usr/local/rvm/scripts/rvm"
else
  printf "ERROR: An RVM installation was not found.\n"
fi

# Use rvm to switch to the default ruby. 
rvm use default

# Now launch the app
cd /home/deploy/app-name-here/current
nohup rake QUEUE=* RAILS_ENV=production environment resque:work &

I've been using this kind of set up for years, and it's solid. The servers don't crash. I don't yet need the overhead of installing another system (like the god gem) to watch over these other servers.

Additionally, I use a capistrano gem to handle restarting the workers on deploy.

like image 156
Dogweather Avatar answered Nov 08 '22 12:11

Dogweather


In production you should be using god to watch your processes. Even if this project is a small one, I strongly recommend investing your time and setting it up.

Another big a must is Capistrano.

So, if you were using god, here's a config file that would help you.

You could also try scheduling rake resque:work at system startup, using a proper script in /etc/init.d/ or /etc/init/ or another (depends on what system you use). I tried this some time ago and I gave up (don't remember why).

I understand that this my answer isn't exactly what you're looking for right now. But imagine this: if everything is set up, then deploying next version is as easy as running rake deploy on your development machine. And it will take care of pulling your code from repository, running migrations, restarting workers and webservers and what not.

like image 44
Sergio Tulentsev Avatar answered Nov 08 '22 14:11

Sergio Tulentsev