Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What is going on with this article?

More than 5 years have passed since last update.

@kackytw

houndをcapistranoでデプロイする

目的

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
Help us understand the problem. What is going on with this article?
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
2
Help us understand the problem. What is going on with this article?