216
218

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

はじめてのCapistrano

Last updated at Posted at 2012-09-18

Capistranoを使うととデプロイが簡単だという話を良く聞くけれど、
Capistranoを使うことが難しかったのでメモ。

##Getting Started

###インストール

$ gem install capistrano

###実行する

設定ファイルを作成するコマンド

$ capify .

を実行すると、

[working_dir]/Capfile
[working_dir]/config
[working_dir]/config/deploy.rb

が作成される

###タスクの基本

config/deploy.rbを空にして以下を記述する

config/deploy.rb
# localhost の ssh を許可しておくこと
task :list, :hosts => "localhost" do
	run "ls"
end

terminalで以下を実行する

$ cap list #=> localhostのファイル一覧が出力される

パスワードを問われるのはSSHで接続しているため

###:hostをまとめる

デフォルトでは、全てのサーバー・全てのロールが実行される。
ロールを設定するのは局所的な動作を期待するため。

config/deploy.rb
# :hostsをまとめることができる
role :local, "localhost"

task :list do
	run "ls"
end

###複数サーバーを設定する

config/deploy.rb
# 複数のサーバーに実行することができる
role :local, "localhost", "anotherhost"

task :list do
	run "ls"
end

###複数ロールを設定する

config/deploy.rb
# 複数ロールを持つことができる
role :local, "localhost"
role :another, "anotherhost"

task :list, :roles => :local do
	run "ls"
end

task :list_another, :roles => :another do
	run "ls"
end
	

###タスクの説明

config/deploy.rb
role :local, "localhost"

# コマンド一覧に表示される説明
desc "Echo the server's host name"
task :echo_hostname do
	run "echo `hostname`"
end
$ cap -vT #=> コマンド一覧

...
cap deploy:web:enable        # Makes the application web-accessible again.
cap echo_hostname            # Echo the server's host name
cap invoke                   # Invoke a single command on the remote servers.
...

###コマンドを直接実行

cap invoke COMMAND="echo 'Hello World'" #=> Hello, Wrold

##デプロイ設定

###アプリケーション名を設定

config/deploy.rb
set :application => "myapplication"

###リポジトリの設定

config/deploy.rb
# リポジトリの場所を指定する
set :repository, "ssh://localhost/var/git/myapplication.git"
# リポジトリの種類を指定する
set :scm, :git

###デプロイ先の指定

config/deploy.rb
set :deploy_to, "/var/www/rails/"

role :app, 	"localhost", 					# アプリケーションサーバー
role :web, 	"localhost", 					# Webサーバー
role :db,	"localhost", :primary => true   # DBサーバー

DBはmaster/slaveがあればprimaryでコントロールできる
全て同じ場合は次のような書き方もできる。

config/deploy.rb
server "localhost", :app, :web, :db, :primary => true

###実行ユーザーの設定

config/deploy.rb
set :user, "foo"

###リポジトリユーザーの設定

config/deploy.rb
set :scm_username, "foo"

###スーパーユーザー権限で実行の設定

config/deploy.rb
set :use_sudo, false #=> defaultではtrue

##deployコマンド

cap deploy                # Deploys your project.
cap deploy:check          # Test deployment dependencies.
cap deploy:cleanup        # Clean up old releases.
cap deploy:cold           # Deploys and starts a `cold' application.
cap deploy:create_symlink # Updates the symlink to the most recently deployed...
cap deploy:migrate        # Run the migrate rake task.
cap deploy:migrations     # Deploy and run pending migrations.
cap deploy:pending        # Displays the commits since your last deploy.
cap deploy:pending:diff   # Displays the `diff' since your last deploy.
cap deploy:restart        # Blank task exists as a hook into which to install...
cap deploy:rollback       # Rolls back to a previous version and restarts.
cap deploy:rollback:code  # Rolls back to the previously deployed version.
cap deploy:setup          # Prepares one or more servers for deployment.
cap deploy:start          # Blank task exists as a hook into which to install...
cap deploy:stop           # Blank task exists as a hook into which to install...
cap deploy:symlink        # Deprecated API.
cap deploy:update         # Copies your project and updates the symlink.
cap deploy:update_code    # Copies your project to the remote servers.
cap deploy:upload         # Copy files to the currently deployed version.
cap deploy:web:disable    # Present a maintenance page to visitors.
cap deploy:web:enable     # Makes the application web-accessible again.
cap invoke                # Invoke a single command on the remote servers.
cap shell                 # Begin an interactive Capistrano session.

##Namespace

Capistrano 2.x以降、全てのタスクはネームスペース化されており、モジュールとして分離できます。ここに処理をはさみ込むこともできます。

config/deploy.rb
# デプロイ時に rake resque:work を動かすgodスクリプトを呼ぶ
namespace :deploy do
  task :start, :roles => :app do
    run "god start resque-worker"
  end

  task :restart, :roles => :app do
    run "god restart resque-worker"
  end

  task :stop, :roles => :app do
    run "god stop resque-worker"
  end
end
216
218
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
216
218

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?