diff --git a/Gemfile b/Gemfile index 1104ca8..6cdc475 100644 --- a/Gemfile +++ b/Gemfile @@ -33,7 +33,7 @@ end # gem 'jbuilder' # Use unicorn as the app server -# gem 'unicorn' +gem 'unicorn' # Deploy with Capistrano # gem 'capistrano' diff --git a/Gemfile.lock b/Gemfile.lock index ee5fb0a..75ae489 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -62,6 +62,7 @@ GEM railties (>= 3.0, < 5.0) thor (>= 0.14, < 2.0) json (1.8.1) + kgio (2.9.2) libv8 (3.16.14.3) mail (2.5.4) mime-types (~> 1.16) @@ -97,6 +98,7 @@ GEM activesupport (= 4.1.0) rake (>= 0.8.7) thor (>= 0.18.1, < 2.0) + raindrops (0.13.0) rake (10.2.2) rb-readline (0.5.1) redcarpet (3.1.1) @@ -135,6 +137,10 @@ GEM uglifier (2.5.0) execjs (>= 0.3.0) json (>= 1.8.0) + unicorn (4.8.3) + kgio (~> 2.6) + rack + raindrops (~> 0.7) webrick (1.3.1) PLATFORMS @@ -159,4 +165,5 @@ DEPENDENCIES sass-rails therubyracer uglifier + unicorn webrick diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 239942a..945e3b7 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -3,6 +3,7 @@ class ApplicationController < ActionController::Base before_filter :update_ip, :update_seen, :check_banned # TODO: force_ssl + # TODO: remove this! http_basic_authenticate_with name: "redstone", password: "sheep_" helper :all diff --git a/config/unicorn.rb b/config/unicorn.rb new file mode 100644 index 0000000..c02d4ba --- /dev/null +++ b/config/unicorn.rb @@ -0,0 +1,15 @@ +root = "/home/redstoner/website/public" +working_directory root +pid "#{root}/tmp/pids/unicorn.pid" +stderr_path "#{root}/log/unicorn.log" +stdout_path "#{root}/log/unicorn.log" + +listen "/tmp/unicorn.redstoner.sock" +worker_processes 2 +timeout 30 + +# Force the bundler gemfile environment variable to +# reference the capistrano "current" symlink +before_exec do |_| + ENV["BUNDLE_GEMFILE"] = File.join(root, 'Gemfile') +end \ No newline at end of file diff --git a/config/unicorn_init.sh b/config/unicorn_init.sh new file mode 100644 index 0000000..7ab5453 --- /dev/null +++ b/config/unicorn_init.sh @@ -0,0 +1,84 @@ +#!/bin/sh +### BEGIN INIT INFO +# Provides: unicorn +# Required-Start: $remote_fs $syslog +# Required-Stop: $remote_fs $syslog +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Manage unicorn server +# Description: Start, stop, restart unicorn server for a specific application. +### END INIT INFO +set -e + +# Feel free to change any of the following variables for your app: +TIMEOUT="${TIMEOUT-60}" +APP_ROOT="/home/redstoner/website/public" +PID="$APP_ROOT/tmp/pids/unicorn.pid" +CMD="cd $APP_ROOT; bundle exec unicorn -D -c $APP_ROOT/config/unicorn.rb -E production" +AS_USER="www-data" +set -u + +OLD_PIN="$PID.oldbin" + +sig () { + test -s "$PID" && kill -$1 `cat $PID` +} + +oldsig () { + test -s $OLD_PIN && kill -$1 `cat $OLD_PIN` +} + +run () { + if [ "$(id -un)" = "$AS_USER" ]; then + eval $1 + else + su -c "$1" - $AS_USER + fi +} + +case "$1" in +start) + sig 0 && echo >&2 "Already running" && exit 0 + run "$CMD" + ;; +stop) + sig QUIT && exit 0 + echo >&2 "Not running" + ;; +force-stop) + sig TERM && exit 0 + echo >&2 "Not running" + ;; +restart|reload) + sig HUP && echo reloaded OK && exit 0 + echo >&2 "Couldn't reload, starting '$CMD' instead" + run "$CMD" + ;; +upgrade) + if sig USR2 && sleep 2 && sig 0 && oldsig QUIT + then + n=$TIMEOUT + while test -s $OLD_PIN && test $n -ge 0 + do + printf '.' && sleep 1 && n=$(( $n - 1 )) + done + echo + + if test $n -lt 0 && test -s $OLD_PIN + then + echo >&2 "$OLD_PIN still exists after $TIMEOUT seconds" + exit 1 + fi + exit 0 + fi + echo >&2 "Couldn't upgrade, starting '$CMD' instead" + run "$CMD" + ;; +reopen-logs) + sig USR1 + ;; +*) + echo >&2 "Usage: $0 " + exit 1 + ;; +esac \ No newline at end of file