Tag: Capistrano

目次

関連ページ

参考情報

  • 書籍: パーフェクトRuby

概要

  • 以下Capistrano 2に関する情報
  • 最新はCapistrano3を参照のこと。

インストール

  • gemでインストール
    gem install capistrano capistrano_colors

デプロイ用の設定ファイルの作成

  • 自分のRailsアプリのフォルダに移動しcapifyコマンドを実行する。
    cd ~/myapp
    capify .
  • config/deploy.rbというファイルが作成される。

設定ファイルの編集

  • config/deploy.rbを編集。以下のようなテンプレートが書きだされている。
    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タスクの作成

  • Capistranoを使ったデプロイ | アライドアーキテクツ エンジニアブログにあるように、まずは、サーバー上でlsを実行するサンプルを作るのがわかりやすいかも。
  • deploy.rbを編集
    # 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のキーチェインを使う方法はなさそうだった。

デプロイ実行

  • deploy.rbに設定を追加する
    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の場合

  • deploy.rbの下のほうのコメントアウトされている部分を有効にする。
    # 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を使っている場合

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

Tips

複数環境にdeployする場合の設定

複数の設定ファイルを使う方法

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

トラブルシューティング

Capistrano 2でNet::SSH::AuthenticationFailedがエラー。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-10-12 (土) 13:05:23