LoginSignup
2
2

More than 5 years have passed since last update.

houndをcapistranoでデプロイする

Posted at

目的

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を使っているがそれの対応してない。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2