Help us understand the problem. What is going on with this article?

houndをcapistranoでデプロイする

More than 3 years have passed since last update.

目的

houndCIを独自に運用する場合、デプロイをさくっと終わらせたい。houndCIはrailsアプリなのでcapistranoに対応できる。capistranoの設定ファイルを書き記す。

Capfile

# Load DSL and set up stages
require 'capistrano/setup'

# Include default deployment tasks
require 'capistrano/deploy'

require 'capistrano/rbenv'
require 'capistrano/bundler'
require 'capistrano/console'
require 'capistrano/rails/migrations'
require 'capistrano-resque'

require 'capistrano3/unicorn'

# Include tasks from other gems included in your Gemfile
#
# For documentation on these, see for example:
#
#   https://github.com/capistrano/rvm
#   https://github.com/capistrano/rbenv
#   https://github.com/capistrano/chruby
#   https://github.com/capistrano/bundler
#   https://github.com/capistrano/rails
#   https://github.com/capistrano/passenger
#
# require 'capistrano/rvm'
# require 'capistrano/rbenv'
# require 'capistrano/chruby'
# require 'capistrano/bundler'
# require 'capistrano/rails/assets'
# require 'capistrano/rails/migrations'
# require 'capistrano/passenger'

# Load custom tasks from `lib/capistrano/tasks` if you have any defined

# dotenvはお好みで
require 'dotenv'

Dotenv.load

Gemfile

gem 'capistrano-rbenv'
gem 'capistrano-bundler'
gem 'capistrano-rails'
gem 'capistrano3-unicorn'
gem 'capistrano-resque'

config/deploy.rb

# レポジトリのURL。フォークした場合はそのURLを入れる
set :repo_url, 'git@github.com:thoughtbot/hound.git'
set :branch, -> { `git rev-parse --abbrev-ref HEAD`.chomp }.call
set :deploy_to, '/hogehoge'
set :linked_files, %w(.env)
set :linked_dirs, %w(log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system)
set :keep_releases, 2

set :rbenv_type, :system
set :rbenv_ruby, '2.2.0'

set :unicorn_rack_env, -> { fetch(:rails_env) }

# houndで使うresque worker
set :workers, { "high" => 1, "medium" => 1, "low" => 1 }

config/deploy/development.rb

set :rails_env, :development

# デプロイ先のサーバー名を入れる
DEV_SERVER = 'hogehoge.com'

server DEV_SERVER
set :branch, "master"

role :app, DEV_SERVER
role :resque_worker, DEV_SERVER
role :resque_scheduler, DEV_SERVER

config/unicorn/development.rb

app_path = "/hogehoge/development/current"

listen 3000, :tcp_nopush => true
timeout 60
preload_app true
worker_processes 2
pid "#{app_path}/tmp/pids/unicorn.pid"

stdout_path "log/unicorn.log"
stderr_path "log/unicorn_error.log"

before_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
    Process.kill 'QUIT', Process.pid
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.connection.disconnect!
end

after_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.establish_connection
end

デプロイ方法

リポジトリを落としてくる

gemをinstallする

bundle install

デプロイ

bundle exec cap development deploy

サーバー(unicorn,resque)再起動

bundle exec cap development unicorn:stop
bundle exec cap development unicorn:start
bundle exec cap development resque:stop
bundle exec cap development resque:start

TODO

最新のhoundはunicornじゃなくてpumaを使っているがそれの対応してない。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away