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することはできたんですが、課題もいろいろ残ってます。
サービスが起動しない
DBのバックアップやmigrate
- 例では取り上げていませんが、実はDBのmigrateをし忘れていたせいでアプリが落ちたりもしました。migrateタスクもありますので、そちらを実行すればいいはずですがまだためしてません。
このへんが次回へ続きます。