Search code examples
ruby-on-railsubuntunginxapache2webserver

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

  • notice that there are gems for unicorn and thin but there is no unicorn.rb or thin.rb in my config folder for my app... I am still super lost if any one can give me some insight on some steps to take to figure this out I would really appreciate it. Anything would help, thanks for reading.

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


Solution

  • 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