Switchtowerチュートリアル(1)

昨日時点まででできたことをまとめてみました。
オーソドックスなdeployまでです。

インストール

 $ sudo gem install switchtower
 $ rehash

apply

Switchtowerを動作させるため、作っているアプリに対してSwitchtowerizeします。

 $ switchtower --apply-to path/to/my_app

config/deploy.rb と lib/tasks/switchtower.rake ができます。

基本的な設定をする

チュートリアルに従って基本的な設定をします。なお"kuro_box"はうちの玄箱サーバ、"saihu"は私が作っている家計簿アプリの名前です。以下、特別な断りがない限りこの名称を用います。

config/deploy.rbに追加したり書き換えたり。

set :application, "saihu"
set :repository,  "http://kuro_box/repos/rails/trunk/saihu"

role :web, kuro_box
role :app, kuro_box
role :db,  kuro_box, :primary => true

set  :deploy_to, "/var/webapp/#{application}"
set  :user, "update_operator"

同じくチュートリアルにしたがって、以下の再起動タスクを追加します。

desk "Restart the web server."
task :restart, :roles => :app do
  sudo 	"/etc/init.d/apache2 restart"
end

いざ実行

 $ rake remote_exec ACTION="setup"

ssh秘密鍵パスフレーズを聞かれるので入力。入力結果が画面に表示されてしまうのはのちほど対策を考えるとして、まずは周囲に人がいないことを確認しましょう(笑)。

結果、deploy.rbに記述した"deploy_to"以下に、このようなディレクトリ構造ができませんでした。。。orz
これはdeploy_toで指定した /var/webapp/saihu に対する読み書き権が、ログインユーザであるupdate_operator にないことが原因です。これもちゃんとした対策はあとにして、とりあえず動かしましょう。

# remote
 $ sudo chown -R update_operator /var/webapp/saihu

で、再度

 $ rake remote_exec ACTION="setup"

今度はちゃんとできました。

いざ実行(再)

ではようやく、本番サーバへdeployしてみたいと思います。

 $ rake deploy

sudo なタスクを実行するタイミングなどでログインユーザのパスワードを聞かれますのでそれを入力していきます。入力したパスワードが画面に表示されてしまい(略。
サーバ側を見ると、確かに、予定通りの場所にファイル・ディレクトリができてますね。

# remote
 $ find /var/webapp/saihu -type d -maxdepth 3 | grep -v .svn
  /var/webapp/saihu
  /var/webapp/saihu/releases
  /var/webapp/saihu/releases/20051113083656
  /var/webapp/saihu/shared
  /var/webapp/saihu/shared/system
  /var/webapp/saihu/shared/log

後始末として、下記おまけもどうぞ。

おまけ

今回の手順でとりあえずサーバ側にdeployすることはできたんですが、課題もいろいろ残ってます。

サービスが起動しない
  • ファイルの所有者が update_operator になっており、実行ユーザであるwww-dataからdispatch.fcgiが見えなくなっていました。手動で chown -R .. してとりあえず回避。
  • サーバ再起動がうまくできませんでした。(/etc/init.d/apache2 restart)原因は不明ですが、玄箱のサービス再起動に時間がかかりすぎてセッションが終わっちゃったりしてるんですかね。手動で起動して動くことを確認しています。
DBのバックアップやmigrate
  • 例では取り上げていませんが、実はDBのmigrateをし忘れていたせいでアプリが落ちたりもしました。migrateタスクもありますので、そちらを実行すればいいはずですがまだためしてません。

このへんが次回へ続きます。