移行先にcapistranoでdeploy

さくらで動かしていたアプリケーションを移行しているのですが、capifyされたrailsのアプリケーションについては、capistoranoで移行してみました。

まずは、

$ apt-get install subversion

svnを使用できるようにします。

次に、deploy.rbを移行先の環境に合わせて書き換えました。その後、

$ cap deploy:cold

としたところ、

..
 ** [wrap-trap.net :: out] svn: Can't make directory '/opt/shrimp/releases/20090604151717': Permission denied
..

と怒られてしまいました。
ディレクトリの作成で失敗しているようなので調査してみると、確かに権限の問題はあるようですが、そもそも/opt/shrimpというディレクトリ自体も無い…。もうちょっと調べてみると、いきなりdeploy:coldが間違っていたようです。最初はdeploy:setupを行う必要がありました。

$ cap deploy:setup
  * executing `deploy:setup'
  * executing "sudo -p 'sudo password: ' mkdir -p /opt/shrimp /opt/shrimp/releases /opt/shrimp/shared
 /opt/shrimp/shared/system /opt/shrimp/shared/log /opt/shrimp/shared/pids && sudo -p 'sudo password: '
 chmod g+w /opt/shrimp /opt/shrimp/releases /opt/shrimp/shared /opt/shrimp/shared/system /opt/shrimp/
shared/log /opt/shrimp/shared/pids"
    servers: ["wrap-trap.net"]
    [wrap-trap.net] executing command
 ** [out :: wrap-trap.net] 
    command finished

その後、再度deploy:coldを実行したものの、やはりmkdirでPermission deniedは変わらず。権限がないということで色々と調べてみたところ、deploy:setup後にchownを実行してディレクトリの所有者を変更すれば良いことがわかりました。deploy.rbに以下を追加して再実行し、ディレクトリの所有者を変更します。

set :runner, 'masayuki'
set :group, 'users'
set :use_sudo, true
...
after 'deploy:setup' do
  try_sudo "chown -Rf #{runner}:#{group} #{deploy_to}"
end

「try_sudo」というコマンドは知らなかった。というかcapistranoのコマンドにどんなものがあるか知らない。そういったドキュメントを見たことがないのですが、rdoc見るしかないのかな。

http://lee.hambley.name/capistrano-2.5.0/rdoc/

ちなみに、deploy先の環境に合わせて、after_symlinkでファイルを上書いています。これが普通のやり方なのかわかりませんが。

task :after_symlink do
  %w{database.yml envrinment.rb}.each do |f|
    run "cp -f #{shared_path}/files/#{f} #{current_path}/config/#{f}"
  end
  %w{production.rb}.each do |f|
    run "cp -f #{shared_path}/files/#{f} #{current_path}/config/environments/#{f}"
  end 
end

passengerとの連携はまだできてないので、後日試してみたいと思います。