Edited at

unicorn + rails 用 Capistrano 3 の設定ファイル

More than 5 years have passed since last update.

動くところまでできたので共有します。


Gemfile

group :development, :test do

gem 'capistrano', :require => false
gem 'capistrano-rails', :require => false
gem 'capistrano-rbenv', :require => false
gem 'capistrano-bundler', :require => false
end


Capfile

# Load DSL and Setup Up Stages

require 'capistrano/setup'

# Includes default deployment tasks
require 'capistrano/deploy'

require 'capistrano/rbenv'
set :rbenv_type, :user
set :rbenv_ruby, '2.0.0-p247'

require 'capistrano/bundler'
require 'capistrano/rails/assets'
require 'capistrano/rails/migrations'

# Loads custom tasks from `lib/capistrano/tasks' if you have any defined.
Dir.glob('lib/capistrano/tasks/*.cap').each { |r| import r }



lib/capistrano/tasks/unicorn.cap

namespace :unicorn do

task :environment do
set :unicorn_pid, "#{shared_path}/tmp/pids/unicorn.pid"
set :unicorn_config, "#{current_path}/config/unicorn/#{fetch(:rails_env)}.rb"
end

def start_unicorn
within current_path do
execute :bundle, :exec, :unicorn, "-c #{fetch(:unicorn_config)} -E #{fetch(:rails_env)} -D"
end
end

def stop_unicorn
execute :kill, "-s QUIT $(< #{fetch(:unicorn_pid)})"
end

def reload_unicorn
execute :kill, "-s USR2 $(< #{fetch(:unicorn_pid)})"
end

def force_stop_unicorn
execute :kill, "$(< #{fetch(:unicorn_pid)})"
end

desc "Start unicorn server"
task :start => :environment do
on roles(:app) do
start_unicorn
end
end

desc "Stop unicorn server gracefully"
task :stop => :environment do
on roles(:app) do
stop_unicorn
end
end

desc "Restart unicorn server gracefully"
task :restart => :environment do
on roles(:app) do
if test("[ -f #{fetch(:unicorn_pid)} ]")
reload_unicorn
else
start_unicorn
end
end
end

desc "Stop unicorn server immediately"
task :force_stop => :environment do
on roles(:app) do
force_stop_unicorn
end
end
end



config/deploy.rb

set :application, 'app'

set :repo_url, 'git@github.com:your/app.git'
set :deploy_to, '/var/www/app'
set :log_level, :info

set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system public/assets}

set :ssh_options, {
keys: [File.expand_path('~/.ssh/id_rsa')],
forward_agent: true,
auth_methods: %w(publickey)
}

namespace :deploy do
desc 'Restart application'
task :restart do
invoke 'unicorn:restart'
end
end
after 'deploy:publishing', 'deploy:restart'



config/deploy/staging.rb

set :stage, :staging

set :branch, 'development'
set :rails_env, 'staging'
set :migration_role, 'db'

server 'staging.example.local', user: 'deploy', roles: %w{web app db}