Alan DeLonga
Alan DeLonga

Reputation: 484

How to restart RoR services after server has been rebooted

Update I have been searching around to see what services would possibly need to be restarted in my project after reboot. One of them was thinking sphinx, which I finally got to the point where it logs:

[Fri Nov 16 19:34:29.820 2012] [29623] accepting connections

But I still cant run searchd or searchd --stop because there was no generated sphinx.conf file in the etc/sphinxsearch for more info refer to this open thread on thinking_sphinx after reboot

I then turned to looking into restarting unicorn or thin based on some insight I got. The issue is when I check my gems I see one for thin AND unicorn. But when I try to start either one of them they have no file residing in etc/init.d/ where the nginx and sphinxsearch files reside...

Would rebooting totally erase the files for an app server like thin or unicorn? We are hosted on Rackspace running

ruby 1.9.2p290
rails (3.2.8, 3.2.7, 3.2.0)
nginx/1.1.19

thin 1.4.1
unicorn 4.3.1

When I run unicorn I get the same issue as referenced here :

> /usr/local/bin/unicorn start

/usr/local/lib/ruby/gems/1.9.1/gems/unicorn-4.3.1/lib/unicorn/configurator.rb:610:in `parse_rackup_file': rackup file (start) not readable (ArgumentError)
from /usr/local/lib/ruby/gems/1.9.1/gems/unicorn-4.3.1/lib/unicorn/configurator.rb:76:in `reload'
from /usr/local/lib/ruby/gems/1.9.1/gems/unicorn-4.3.1/lib/unicorn/configurator.rb:67:in `initialize'
from /usr/local/lib/ruby/gems/1.9.1/gems/unicorn-4.3.1/lib/unicorn/http_server.rb:104:in `new'
from /usr/local/lib/ruby/gems/1.9.1/gems/unicorn-4.3.1/lib/unicorn/http_server.rb:104:in `initialize'
from /usr/local/lib/ruby/gems/1.9.1/gems/unicorn-4.3.1/bin/unicorn:121:in `new'
from /usr/local/lib/ruby/gems/1.9.1/gems/unicorn-4.3.1/bin/unicorn:121:in `<top (required)>'
from /usr/local/bin/unicorn:19:in `load'
from /usr/local/bin/unicorn:19:in `<main>'

When I run thin it just opens a command line prompt...

/usr/local/bin/thin start

>> Using rack adapter

Other gems:

* LOCAL GEMS *

actionmailer (3.2.8, 3.2.7, 3.2.0)
actionpack (3.2.8, 3.2.7, 3.2.0)
activemodel (3.2.8, 3.2.7, 3.2.0)
activerecord (3.2.8, 3.2.7, 3.2.0)
activeresource (3.2.8, 3.2.7, 3.2.0)
activesupport (3.2.8, 3.2.7, 3.2.0)
arel (3.0.2)
builder (3.0.0)
bundler (1.1.5)
carmen (1.0.0.beta2)
carmen-rails (1.0.0.beta3)
cocaine (0.2.1)
coffee-rails (3.2.2)
coffee-script (2.2.0)
coffee-script-source (1.3.3)
daemons (1.1.9)
erubis (2.7.0)
eventmachine (0.12.10)
execjs (1.4.0)
faraday (0.8.4)
faraday_middleware (0.8.8)
foursquare2 (1.8.2)
geokit (1.6.5)
hashie (1.2.0)
hike (1.2.1)
httparty (0.8.3)
httpauth (0.1)
i18n (0.6.0)
journey (1.0.4)
jquery-rails (2.0.2)
json (1.7.4, 1.7.3)
jwt (0.1.5)
kgio (2.7.4)
lastfm (1.8.0)
libv8 (3.3.10.4 x86_64-linux)
mail (2.4.4)
mime-types (1.19, 1.18)
minitest (1.6.0)
multi_json (1.3.6)
multi_xml (0.5.1)
multipart-post (1.1.5)
mysql2 (0.3.11)
oauth2 (0.8.0)
paperclip (3.1.1)
polyglot (0.3.3)
rack (1.4.1)
rack-cache (1.2)
rack-ssl (1.3.2)
rack-test (0.6.1)
rails (3.2.8, 3.2.7, 3.2.0)
railties (3.2.8, 3.2.7, 3.2.0)
raindrops (0.10.0, 0.9.0)
rake (0.9.2.2, 0.8.7)
rdoc (3.12, 2.5.8)
riddle (1.5.3)
sass (3.2.0, 3.1.19)
sass-rails (3.2.5)
sprockets (2.1.3)
sqlite3 (1.3.6)
sqlite3-ruby (1.3.3)
therubyracer (0.10.2, 0.10.1)
thin (1.4.1)
thinking-sphinx (2.0.10)
thor (0.16.0, 0.15.4, 0.14.6)
tilt (1.3.3)
treetop (1.4.10)
tzinfo (0.3.33)
uglifier (1.2.7, 1.2.4)
unicorn (4.3.1)
xml-simple (1.1.1)

I am working on a project that was built by another group. I made some modifications to a constants file in the config folder (changing some values for arrays that populated some drop down fields), but the app had to be rebooted before those changes would be recognized. The hosting is through Rackspace, we rebooted through the option on their site. I contacted them and checked the status of our server, the port is open and operational. The problem is the app is not running when you go to the address for the site. Then when I put in the ip address of the server it just says "Welcome to Nginx". But in a log files I see:

[Thu Nov 15 02:34:37.945 2012] [15916] caught SIGTERM, shutting down
[Thu Nov 15 02:34:37.996 2012] [15916] shutdown complete

I am not very versed in server side set up. I have also never worked on a Rails project that had to have specific services started before the application will start. Any insight as to how to figure out what services need to be restarted and how to go about restarting them would be greatly appreciated. I feel kind of dead in the water at this point...

Thanks,

Alan

Upvotes: 1

Views: 2909

Answers (3)

Anthony D Gardner
Anthony D Gardner

Reputation: 123

I know I'm coming late to the game, but the process you are running:

unicorn_rails -p 3000

Is dying when you close the session by default. If you want it to continue without dying, run:

nohup unicorn_rails -p 3000 &

'nohup' stands for "no hangup", which keeps the process running even after you drop. The '&' tells the OS to run it as a job in the background.

Hope this hellps!

Upvotes: 0

Alan DeLonga
Alan DeLonga

Reputation: 484

Ok so after hours of searching and trying countless things I found online I ran this from the command line:

unicorn_rails -p 3000

And like magic the site is back up and running, now my issue is when I close the console (that I have that command running in) the site goes down again.

I am going to follow this to hopefully fix this issue

NOTE: These are the steps I took to get things working

When rebooting the server you have to restart some services before the app will be accessible:

1) thinking_sphinx
reference sites
http://pat.github.com/ts/en/rake_tasks.html
http://www.claytonlz.com/2010/09/thinkingsphinx-conf-problems/

a)create/modify  app/config/sphinx.yml

    development:
      morphology: stem_en
      port: 9312
      bin_path: "/usr/bin"             # set up the path to binary for searchd
      searchd_binary_name: searchd
      indexer_binary_name: indexer
      #mem_limit: 128M
    test:
      morphology: stem_en
      port: 9312
      mem_limit: 128M
    production:
      morphology: stem_en
      port: 9312
      mem_limit: 512M
    # the searchd ip, in case it's not on localhost
    # address: 10.10.0.0
    # this is by default included in db/sphinx
    # searchd_file_path: "/path/to/shared/folder/sphinx"

b)rake thinking_sphinx:index
c)rake thinking_sphinx:configure       # creates config/development.sphinx.conf which helps define sphinx's indexing

d)# then you have to start sphinx, there are 2 ways to do this

    rake thinking_sphinx:start
    rake thinking_sphinx:stop

    OR

    searchd
    searchd --stop

    # only the rake commands worked for me, when I tried to run searchd
    # I got an error FATAL: no readable config file (looked in /etc/sphinxsearch/sphinx.conf, ./sphinx.conf).
    # for some reason we dont have a sphinx.conf file, but the rake commands work without it

e)# once you start thinking_sphinx check log/searchd.log file for the line
    [Fri Nov 16 19:34:29.820 2012] [29623] accepting connections

2) nginx
reference site:
http://wiki.nginx.org/CommandLine

a) check that nginx is up and running
    i) start server 
        # to check where nginx resides type in this into server console
        which nginx
        # whatever path it gives you is how you start the server this is my path
        /usr/sbin/nginx 
    ii) stop server
        /usr/sbin/nginx -s stop # use the path given by which command

3) unicorn (starting app server)
reference site:
http://codelevy.com/2010/02/09/getting-started-with-unicorn.html

a) test if unicorn will run after previous changes
    unicorn_rails -p 3000
    # the site should now be up and running, check that it is
    # console should now log the different actions you do on the site 

b) create unicorn.rb in config folder (if none is there)
    # only start this step if the step above got the site running
    # close the console or exit the process you started above
    # contents of unicorn.rb 
    worker_processes 2      #(starts 2 child processes, not completely neccissary)
    preload_app true
    timeout 30
    listen 3000

    after_fork do |server, worker|
      ActiveRecord::Base.establish_connection
    end

c) run unicorn in the background
    # make sure you exited the process above before running this
    unicorn_rails -c config/unicorn.rb -D

    # this was giving me an error that it said was logged by stderr
    # I got the command to run by adding a command to the front
    http://stackoverflow.com/questions/2325152/check-for-stdout-or-stderr

    exec 2> /dev/null unicorn_rails -c config/unicorn.rb -D


d) (optional) check stats from starting unicorn

    i) pgrep -lf unicorn_rails
        #sample output
        5374 unicorn_rails master -c config/unicorn.rb -D             
        5388 unicorn_rails worker[0] -c config/unicorn.rb -D    # not needed currently  
        5391 unicorn_rails worker[1] -c config/unicorn.rb -D    # not needed currently

    ii) cat tmp/pids/unicorn.pid # from inside the streetpotato folder
        #sample output
        5374

Upvotes: 0

Philip Hallstrom
Philip Hallstrom

Reputation: 19879

Nginx by itself won't serve Rails applications. It needs an "app server" it can pass the request to and get a response back. There's a number of options, the most popular being Passenger, Thin, and Unicorn. I would recommend you start with the nginx configuration on the server and see if any of these are mentioned. That should point you to how to restart them.

http://www.modrails.com/documentation/Users%20guide%20Nginx.html

http://articles.slicehost.com/2008/5/27/ubuntu-hardy-nginx-rails-and-thin

http://sirupsen.com/setting-up-unicorn-with-nginx/ (scroll down to Rails on Unicorns)

Upvotes: 1

Related Questions