Freelance Web Engineer

Capistrano svn+sshスキームの場合

2011-03-02  capistrano, rails, subversion

WEB+DB PRESS Vol.61を見て、やっぱデプロイはcapistranoだろと思い実際やってみました。紙面には載っていない、SCMがSubversionの場合かつスキームがsvn+sshで公開鍵方式にしている場合の設定方法を紹介します。

今回の環境は以下の通り:

Capistrano
2.5.19
デプロイ先
EC2 (us-west)

1. config/deploy.rbの記述

以下、抜粋です。

set :scm, :subversion
set :repository,  "svn+ssh://[ユーザー名]@[リポジトリのパス]"
set :deploy_to, "[リモートサーバ上のデプロイ先]"
set :deploy_via, :checkout

リモートサーバのデプロイ先は予めmkdirしておきます。

2. deploy実行したときのエラー

まずは、cap deploy:setupして、リモートサーバ上のcapistrano用ディレクトリを作成します。その後cap deployしてみると以下のエラーがでました。

$ cap deploy
  * executing `deploy'
  * executing `deploy:update'
 ** transaction: start
  * executing `deploy:update_code'
    executing locally: "svn info svn+ssh://[ユーザー名]@[リポジトリのパス]  -rHEAD"
  * executing "svn checkout -q  -r97 svn+ssh://[ユーザー名]@[リポジトリのパス] [リモートのデプロイ先]/releases/20110302060300 && (echo 97 > [リモートのデプロイ先]/releases/20110302060300/REVISION)"
    servers: ["******.compute.amazonaws.com"]
    [******.compute.amazonaws.com] executing command
 ** [******.compute.amazonaws.com :: err] svn: Network connection closed unexpectedly
    command finished
*** [deploy:update_code] rolling back
  * executing "rm -rf [デプロイ先]/20110302060300; true"
    servers: ["******.compute.amazonaws.com"]
    [******.compute.amazonaws.com] executing command
    command finished
failed: "sh -c 'svn checkout -q  -r97 svn+ssh://[ユーザー名]@[リポジトリのパス] [デプロイ先]/releases/20110302060300 && (echo 97 > [デプロイ先]/releases/20110302060300/REVISION)'" on ******.compute.amazonaws.com

svn: Network connection closed unexpectedly部分がエラーメッセージです。リモートサーバー側の公開鍵の設定はしてあり、コマンド単体で実行ができることは確認していました(svn checkout -q -r97 〜部分)。

3. 対策

リモートサーバの実行ユーザーのホームディレクトリで以下の設定を行います。

$ vi .subversion/config
--
[tunnels]
ssh = ssh -l [ユーザー名] -i [秘密鍵]
--

秘密鍵のパスは絶対パスじゃないとエラーになりました。

これでローカルマシンから再度cap deployを行うと、リモートサーバ上でチェックアウトできると思います。

comments powered by Disqus