#author("2019-10-12T04:05:23+00:00","default:wikiwriter","wikiwriter")
#author("2020-01-03T15:01:46+00:00","default:wikiwriter","wikiwriter")
&tag(Capistrano);
*目次 [#j8aad278]
#contents

*関連ページ [#xc2eea32]
-[[Rails]]
-[[Rails3]]
-[[Capistrano3]]

*参考情報 [#j24c1780]
-書籍: パーフェクトRuby


*概要 [#ge3a936b]
-以下Capistrano 2に関する情報
-最新は[[Capistrano3]]を参照のこと。

*インストール [#i4eb383d]
-gemでインストール
 gem install capistrano capistrano_colors

*デプロイ用の設定ファイルの作成 [#v883c334]
-自分のRailsアプリのフォルダに移動しcapifyコマンドを実行する。
 cd ~/myapp
 capify .
-config/deploy.rbというファイルが作成される。
*設定ファイルの編集 [#v03db165]
-config/deploy.rbを編集。以下のようなテンプレートが書きだされている。
#pre{{
set :application, "set your application name here"
set :repository,  "set your repository location here"

# set :scm, :git # You can set :scm explicitly or Capistrano will make an intelligent guess based o\
n known version control directory names
# Or: `accurev`, `bzr`, `cvs`, `darcs`, `git`, `mercurial`, `perforce`, `subversion` or `none`

role :web, "your web-server here"                          # Your HTTP server, Apache/etc
role :app, "your app-server here"                          # This may be the same as your `Web` ser\
ver
role :db,  "your primary db-server here", :primary => true # This is where Rails migrations will ru\
n
role :db,  "your slave db-server here"

}}
**lsタスクの作成 [#s15ac9e4]
-[[Capistranoを使ったデプロイ | アライドアーキテクツ エンジニアブログ:http://tech.aainc.co.jp/archives/3773]]にあるように、まずは、サーバー上でlsを実行するサンプルを作るのがわかりやすいかも。
-deploy.rbを編集
#pre{{
# sshのユーザー名
set :user, "demouser"
# ssh公開鍵設定
set :ssh_options, :port=>11111 :forward_agent=>false, :keys=>"~/.ssh/id_rsa_demo", :passphrase => "demopassphrase"
# sudoするかどうか(sudoしないほうが普通らしい)
set :use_sudo, false
# デプロイサーバ定義
role :web, "demohost"

# lsコマンド実行タスク
task :list  do
    run "ls"
end
}}
-以下のコマンドで実行。
 cap list
-rubyのNet::SSHというライブラリを使い、ssh経由でログインしてlsを実行するイメージ。パスフレーズを直書きすることになるのが気になる場合、毎回パスフレーズを入力する / ssh-agentを使う(起動ごとに1回は入力必要) / パスフレーズなしのキーを使うなどの回避方法がある。調べた限り、Macのキーチェインを使う方法はなさそうだった。


**デプロイ実行 [#ie76c58d]
-deploy.rbに設定を追加する
#pre{{
set :user, "demouser"
# ssh公開鍵設定
set :ssh_options, :port=>11111 :forward_agent=>false, :keys=>"~/.ssh/id_rsa_demo", :passphrase => "demopassphrase"
# sudoするかどうか(sudoしないほうが普通らしい)
set :use_sudo, false

# アプリケーション名
set :application, "demoapp"
# scmの指定
set :scm ,:git
# gitリポジトリ
set :repository, "git@gitserver:demoapp.git"
# gitブランチ名
set :branch, :master
# デプロイ方式。:copyの場合手元でソースを最新にしてからコピーする。
# :checkoutの場合サーバー上でgitリポジトリに接続して更新するらしい。
set :deploy_via , :copy
# deploy先ディレクトリ(サーバーのディレクトリ)
set :deploy_to,  "/var/www/html/demo"

# デプロイサーバ定義
role :web, "demohost"

# lsコマンド実行タスク
task :list  do
    run "ls"
end
}}
-デプロイ実行の準備(初回やデプロイ先がかわるなどのごとに実行する必要あり)。
 cap deploy:setup
-デプロイ実行
 cap deploy
-サーバー上にファイルがあるかどうか確認する。

***デプロイ先がPassengerの場合 [#t0b3b2d8]
-deploy.rbの下のほうのコメントアウトされている部分を有効にする。
#pre{{
# If you are using Passenger mod_rails uncomment this:
namespace :deploy do
   task :start do ; end
   task :stop do ; end
   task :restart, :roles => :app, :except => { :no_release => true } do
     run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}"
   en
}}

***デプロイ先でrbenv+bundlerを使っている場合 [#xbf97da0]
-bundlerを使っている場合、bundler/capistranoを、rbenvを使っている場合、capistrano-rbenvを使う。deploy.rbに以下を追加。
#pre{{
require "bundler/capistrano"
require "capistrano-rbenv"
set :rbenv_ruby_version, "1.9.3-p429"
}}
-デプロイ先でbundlerを実行するので、Gemfile.lockをバージョン管理に入れておく(そうしないとエラーになる)。

*Tips [#o228eb8e]
**複数環境にdeployする場合の設定 [#b7d776f9]
-[[Capistrano で簡単に複数サイトへのデプロイを行えるようにする - @yuumi3のお仕事日記:http://d.hatena.ne.jp/yuum3/20110316/1300256239]]

**複数の設定ファイルを使う方法 [#qafbc98d]
-標準ではconf/deploy以下にproduction.rbとstaging.rbが作られるが、それ以外にも設定を追加したいことがある。
-この場合単にconf/deploy以下に*.rbファイルを作成すればよい。例えば
 conf/deploy/vps.rb
-以下のように一向するとvps.rbが使用される
 bundle exec cap vps deploy

*トラブルシューティング [#hd3059f6]

**Capistrano 2でNet::SSH::AuthenticationFailedがエラー。 [#d1932e47]
-[[CapistranoでSSHのパスワード入力プロンプトが出ずにNet::SSH::AuthenticationFailedエラーとなる問題の解決法あれこれ - Qiita:http://qiita.com/takashibagura/items/33034c7529b553d2d0f9]]にあるようにGemfileでnet-sshのバージョンを固定する。
#pre{{
gem "net-ssh", "2.7.0"
}}

**インストール先のanyevn経由のrbenvが見つからない [#xa189d69]
-例えば以下のようなエラーが発生する。
#pre{{
00:00 rbenv:validate
      WARN  rbenv: 2.6.3 is not installed or not found in $HOME/.rbenv/versions/2.6.3 on mauve
}}
-以下のようにシンボリックリンクを張れば解決?
 ln -s .anyenv/envs/rbenv .rbenv


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS