Capistranoを使ってみる

まずはインストール

# gem install capistrano

railsアプリケーションに組み込んでみる

$ cap --apply-to ~/project/garakuta

設定ファイルを眺め(LAN内の設定なのでサーバー名などは適当)

$ emacs ~/project/garakuta/config/deploy.rb
set :application, "garakuta" 
set :repository, "svn://vaio/var/svn/project/garakuta/trunk"
role :web, "vaio"
role :app, "vaio"
role :db,  "vaio", :primary => true
set :deploy_to, "/home/garakuta/webapp"  
set :user, "garakuta"            

公開用サーバーをセットアップしてみる

$ cd ~/project/garakuta
$ rake remote:setup
(in /home/jet/project/garakuta)
Capistrano/Rake integration is deprecated.
Please invoke the 'cap' command directly: `cap setup'
  * executing task setup
  * executing "umask 02 &&\n    mkdir -p /home/garakuta/webapp /home/garakuta/webapp/releases /home/garakuta/webapp/shared /home/garakuta/webapp/shared/system &&\n    mkdir -p /home/garakuta/webapp/shared/log &&\n    mkdir -p /home/garakuta/webapp/shared/pids"
    servers: ["vaio"]
rake aborted!
no such file to load -- openssl

(See full trace by running task with --trace)

opensslが無いといわれるのでgem で探してみる

# gem search openssl --remote

REMOTE GEMS ***
# gem search ssl --remote
REMOTE GEMS ***
eassl (0.1.1643, 0.1.1635) EaSSL is a library aimed at making openSSL certificate generation and management easier and more ruby-ish. # gem install eassl
もう一回setupしてみる
$ rake remote:setup
Please invoke the 'cap' command directly: `cap setup'
  * executing task setup
  * executing "umask 02 &&\n    mkdir -p /home/garakuta/webapp /home/garakuta/webapp/releases /home/garakuta/webapp/shared /home/garakuta/webapp/shared/system &&\n    mkdir -p /home/garakuta/webapp/shared/log &&\n    mkdir -p /home/garakuta/webapp/shared/pids"
    servers: ["vaio"]
rake aborted!
no such file to load -- openssl

(See full trace by running task with --trace)
やっぱりダメなので次はaptでopensslを探してみる
$ apt-cache search openssl | grep ruby
libopenssl-ruby - OpenSSL interface for Ruby
libopenssl-ruby1.9 - OpenSSL interface for Ruby 1.9
ruby1.8 - Interpreter of object-oriented scripting language Ruby 1.8
libopenssl-ruby1.8 - OpenSSL interface for Ruby 1.8
# apt-get install libopenssl-ruby
そしてトライ
$ rake remote:setup
(in /home/jet/project/garakuta)
Capistrano/Rake integration is deprecated.
Please invoke the 'cap' command directly: `cap setup'
  * executing task setup
  * executing "umask 02 &&\n    mkdir -p /home/garakuta/webapp /home/garakuta/webapp/releases /home/garakuta/webapp/shared /home/garakuta/webapp/shared/system &&\n    mkdir -p /home/garakuta/webapp/shared/log &&\n    mkdir -p /home/garakuta/webapp/shared/pids"
    servers: ["vaio"]
WARNING: Password will echo -- install the 'termios' gem to hide your password.
Password:
パスワードを求められるが公開サーバーはもともとパスワードログインは認めていないので鍵認証でログインできるようにしてdeploy.rbに鍵のパスを書く
$ scp ~/.ssh/id_rsa.pub garakuta@vaio:~/
$ ssh user@vaio
@vaio $ su -
@vaio # mv /home/user/id_rsa.pub /home/garakuta/
@vaio # su - garakuta
@vaio $ mkdir .ssh
@vaio $ cat id_rsa.pub >> .ssh/authorized_keys
@vaio $ exit
@vaio # exit
@vaio $ exit
$ emacs config/deploy.rb
ssh_options[:keys] = %w(/home/jet/.ssh/id_rsa)
そしてトライ
$ rake remote:setup
Capistrano/Rake integration is deprecated.
Please invoke the 'cap' command directly: `cap setup'
  * executing task setup
  * executing "umask 02 &&\n    mkdir -p /home/garakuta/webapp /home/garakuta/webapp/releases /home/garakuta/webapp/shared /home/garakuta/webapp/shared/system &&\n    mkdir -p /home/garakuta/webapp/shared/log &&\n    mkdir -p /home/garakuta/webapp/shared/pids"
    servers: ["vaio"]
    [vaio] executing command
    command finished
うまくいったっぽい。公開サーバーのgarakutaユーザーディレクトリにwebappができているので成功。 ひきつづきdeployしてみる
$ rake deploy
(省略)command "sudo  /home/garakuta/webapp/current/script/process/reaper" failed on vaio
rake aborted!
command "sudo  /home/garakuta/webapp/current/script/process/reaper" failed on vaio
sudo ないとか言われるのでインストールする。ついでにvisoduもしておく
@vaio # apt-get install sudo
@vaio # visudo
garakuta ALL=(ALL)ALL
んでトライ
$ rake remote:daploy
(省略)
//途中でgarakutaユーザーのパスワードを聞かれたりする。
 command finished