読者です 読者をやめる 読者になる 読者になる

TakayukiKoyama Geek Blog

Create, Entertain, Experience

Rails4+Unicorn+Nginx+Chkconfigで自動起動する方法

 サーバが再起動してもRailsが動き続けるようにするための方法です。

Rails

 Railsでアプリケーションを作成。

$ rails new testapp

Unicorn

 Unicornをインストール。

$ vim Gemfile
gem 'unicorn'

$ bandle install

Nginx

 Nginxをインストール。

$ wget http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
$ rpm -ivh epel-release-6-8.noarch.rpm
$ sudo rpm -ivh epel-release-6-8.noarch.rpm

$ yum install nginx -y

 Nginxの設定、起動。

$ sudo vim /etc/nginx/conf.d/default.conf
$ sudo service nginx start
$ sudo chkconfig nginx on

Chkconfig

 起動シェルスクリプトを/etc/init.dに作成。ユーザはvagrantunicornのconfigファイルはconfig/unicorn.rbとします。必要に応じて書き換えて下さい。

$ sudo vim /etc/init.d/unicorn
#!/bin/sh

#chkconfig:2345 85 15
#description:unicorn shell

NAME="Unicorn"
ENV=production

ROOT_DIR="/home/vagrant/testapp"

PID="${ROOT_DIR}/tmp/pids/unicorn.pid"
CONF="${ROOT_DIR}/config/unicorn.rb"
OPTIONS=""
#OPTIONS="--path /rails_app"

start()
{
  if [ -e $PID ]; then
    echo "$NAME already started"
    exit 1
  fi
  echo "start $NAME"
  cd $ROOT_DIR
  su - vagrant -c "cd ${ROOT_RIR} && unicorn -c ${CONF} -E ${ENV} -D ${OPTIONS}"
}

stop()
{
  if [ ! -e $PID ]; then
    echo "$NAME not started"
    exit 1
  fi
  echo "stop $NAME"
  kill -QUIT `cat ${PID}`
}

force_stop()
{
  if [ ! -e $PID ]; then
    echo "$NAME not started"
    exit 1
  fi
  echo "stop $NAME"
  kill -INT `cat ${PID}`
}

reload()
{
  if [ ! -e $PID ]; then
    echo "$NAME not started"
    start
    exit 0
  fi
  echo "reload $NAME"
  kill -HUP `cat ${PID}`
}

restart()
{
    stop
    sleep 3
    start
}

case "$1" in
  start)
    start
    ;;
  stop)
    ;;
  force-stop)
    force_stop
    ;;
  reload)
    reload
    ;;
  restart)
    restart
    ;;
  *)
    echo "Syntax Error: release [start|stop|force-stop|reload|restart]"
    ;;
esac

$ sudo chkconfig unicorn on
$ sudo chkconfig unicorn start

 これで完了です。止めたいときはstop、ソースコードを書き換えたりしたらrestartしてください。

広告を非表示にする