Or little computing tricks and hacks
Restarting unicorn after boot using mina and nginx in Rails
June 17, 2015Posted by on
My teammate did a wonderful job at setting up a droplet in Digital Ocean to host a Rails app. Most of the details are here.
All of the reference to directories are based on having exactly the set up described in that blog post.
However, we noticed that
unicorn was not being restarted after booting, having to do so by hand. Not quite a problem if you are on developing/staging states, but in full production a real problem. Except, we could not use a simple command line, because
unicorn has to be started by
Looking at the
config/deploy.rb file, I noticed the following:
to :launch do invoke :'unicorn:restart' end
so the command line to start unicorn should be:
Actually the command only works if in the correct directory:
/home/deployer/my-app-name/current as follows:
bundle exec mina unicorn:restart
So now, all I had to do was to turn that command into a script called at boot. By the way, the droplet uses Ubuntu.
After a few attempts, I created a file called
/etc/init.d/my_unicorn, you have to have root privileges for this, with the following format:
#!/bin/sh -e # upstart-job # echo "starting unicorn after reboot" exec sudo -u deployer sh -c "cd /home/deployer/my-app-name/current && /home/deployer/.rbenv/shims/bundle exec mina unicorn:restart"
(Looking back “-u deployer” might not be needed but I did not test it.)
By just adding that script, I was able to run
$sudo service my_unicorn start
But, it was not being called at boot yet. I needed to add new service (i.e. my_unicorn) to startup. For that, the following command is needed:
sudo update-rc.d my_unicorn defaults
And that should have worked on reboot, but it wasn’t.
mina is called, it asks for authentication, and after 3 failed attempts it quits with an error. The solution was to create a ssh key and add it to the authorized_keys file, the same way you do for sites like github.
And that is it, if I haven’t forgotten anything!