diff options
| author | Tyler Mercier <tylermercier@gmail.com> | 2013-07-19 09:48:38 -0600 |
|---|---|---|
| committer | Tyler Mercier <tylermercier@gmail.com> | 2013-07-22 15:03:42 -0600 |
| commit | c538fbb9ec6405d5a06e3b39001a22f87f335e9f (patch) | |
| tree | cd0c379efb708c10078c69a3f0cdd1d1d2bcdd02 | |
| parent | 816743656201c0ca2a8fb6282870184636878e0c (diff) | |
add unicorn. add capistrano
| -rw-r--r-- | Capfile | 4 | ||||
| -rw-r--r-- | Gemfile | 4 | ||||
| -rw-r--r-- | Gemfile.lock | 22 | ||||
| -rw-r--r-- | config/deploy.rb | 25 | ||||
| -rw-r--r-- | config/unicorn.rb | 15 | ||||
| -rw-r--r-- | config/unicorn_init.sh | 84 |
6 files changed, 152 insertions, 2 deletions
@@ -0,0 +1,4 @@ +load 'deploy' +# Uncomment if you are using Rails' asset pipeline + # load 'deploy/assets' +load 'config/deploy' # remove this line to skip loading any of the default tasks
\ No newline at end of file @@ -50,10 +50,10 @@ end # gem 'bcrypt-ruby', '~> 3.0.0' # Use unicorn as the app server -# gem 'unicorn' +gem 'unicorn' # Use Capistrano for deployment -# gem 'capistrano', group: :development +gem 'capistrano', group: :development # Use debugger # gem 'debugger', group: [:development, :test] diff --git a/Gemfile.lock b/Gemfile.lock index e4af723..f0e582b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -30,6 +30,12 @@ GEM bootstrap-sass (2.3.2.1) sass (~> 3.2) builder (3.1.4) + capistrano (2.15.5) + highline + net-scp (>= 1.0.0) + net-sftp (>= 2.0.0) + net-ssh (>= 2.0.14) + net-ssh-gateway (>= 1.1.0) capybara (2.1.0) mime-types (>= 1.16) nokogiri (>= 1.3.3) @@ -69,6 +75,7 @@ GEM httparty multi_json (>= 1.3.4) high_voltage (1.2.4) + highline (1.6.19) hike (1.2.3) http_parser.rb (0.5.3) httparty (0.11.0) @@ -82,6 +89,7 @@ GEM railties (>= 3.0, < 5.0) thor (>= 0.14, < 2.0) json (1.8.0) + kgio (2.8.0) mail (2.5.4) mime-types (~> 1.16) treetop (~> 1.4.8) @@ -90,6 +98,13 @@ GEM minitest (4.7.5) multi_json (1.7.7) multi_xml (0.5.4) + net-scp (1.1.2) + net-ssh (>= 2.6.5) + net-sftp (2.1.2) + net-ssh (>= 2.6.5) + net-ssh (2.6.8) + net-ssh-gateway (1.2.0) + net-ssh (>= 2.6.5) nokogiri (1.6.0) mini_portile (~> 0.5.0) pg (0.15.1) @@ -116,6 +131,7 @@ GEM activesupport (= 4.0.0) rake (>= 0.8.7) thor (>= 0.18.1, < 2.0) + raindrops (0.11.0) rake (10.1.0) rdoc (3.12.2) json (~> 1.4) @@ -180,6 +196,10 @@ GEM uglifier (2.1.2) execjs (>= 0.3.0) multi_json (~> 1.0, >= 1.0.2) + unicorn (4.6.3) + kgio (~> 2.6) + rack + raindrops (~> 0.7) websocket (1.0.7) xpath (2.0.0) nokogiri (~> 1.3) @@ -189,6 +209,7 @@ PLATFORMS DEPENDENCIES bootstrap-sass + capistrano capybara coffee-rails (~> 4.0.0) database_cleaner @@ -209,3 +230,4 @@ DEPENDENCIES teaspoon turbolinks uglifier (>= 1.3.0) + unicorn diff --git a/config/deploy.rb b/config/deploy.rb new file mode 100644 index 0000000..98871c2 --- /dev/null +++ b/config/deploy.rb @@ -0,0 +1,25 @@ +set :application, "set your application name here" +set :repository, "set your repository location here" + +# set :scm, :git # You can set :scm explicitly or Capistrano will make an intelligent guess based on known version control directory names +# Or: `accurev`, `bzr`, `cvs`, `darcs`, `git`, `mercurial`, `perforce`, `subversion` or `none` + +role :web, "your web-server here" # Your HTTP server, Apache/etc +role :app, "your app-server here" # This may be the same as your `Web` server +role :db, "your primary db-server here", :primary => true # This is where Rails migrations will run +role :db, "your slave db-server here" + +# if you want to clean up old releases on each deploy uncomment this: +# after "deploy:restart", "deploy:cleanup" + +# if you're still using the script/reaper helper you will need +# these http://github.com/rails/irs_process_scripts + +# If you are using Passenger mod_rails uncomment this: +# namespace :deploy do +# task :start do ; end +# task :stop do ; end +# task :restart, :roles => :app, :except => { :no_release => true } do +# run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}" +# end +# end
\ No newline at end of file diff --git a/config/unicorn.rb b/config/unicorn.rb new file mode 100644 index 0000000..d087fc8 --- /dev/null +++ b/config/unicorn.rb @@ -0,0 +1,15 @@ +root = "/home/username/apps/projectname/current" +working_directory root +pid "#{root}/tmp/pids/unicorn.pid" +stderr_path "#{root}/log/unicorn.log" +stdout_path "#{root}/log/unicorn.log" + +listen "/tmp/unicorn.projectname.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 diff --git a/config/unicorn_init.sh b/config/unicorn_init.sh new file mode 100644 index 0000000..d9d68ae --- /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/username/apps/projectname/current +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=username +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 <start|stop|restart|upgrade|force-stop|reopen-logs>" + exit 1 + ;; +esac |
