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を行うと、リモートサーバ上でチェックアウトできると思います。