capistranoタスクメモ
ようやく自分の家の環境でcapistranoが動くようになった。開発〜配置までがほぼできるようになったのでようやくスタートライン。
以下、自分用のメモだが、capistranoのRails用レシピの中から抜粋というか抽出したcapistranoのタスクの呼出関係、呼び出され関係。":"が付いてるものはnamespace。
(/usr/lib/ruby/gems/1.8/gems/capistrano-2.1.0/lib/capistrano/recipes/deploy.rb)
deploy: defaul update update_code on_rollback { run "rm -rf #{release_path}; true" } #rollback strategy.deploy! #実際のdeploy finalize_update #{latest_release}/(log|public/system|tmp/pids)を #{shared_path}配下にlnするためのタスク symlink rm -f #{current_path} && \ ln -s #{latest_release} #{current_path} # ここで最終的にdeployしたコードとcurrentを接続 restart rollback rollback_code restart migrations # ここでset :migrate_target, :latest update_code migrate symlink restart setup upload #ファイルのアップロードができる便利タスク cleanup #最近の5リリースを残してサーバから消去 check #必要なものがあるかチェック cold update migrate start stop pending: diff default web: disable enable
migrationsというタスクが名前に似合わず、update,migrate,symlink,restartまでやっているのはちょっと微妙な...。
で、なんでこんなものをわざわざ作ったかというと、cap -Tとかマニュアルじゃあんまりよくわかんないって言うのが一つ目の理由。あと、capタスクにフックを書きたかった。updateタスクにはbefore_update, after_updateというフックが書けるっぽいので、どこに付けようかなったいうのを検討したかったついでにメモ。
今作っているアプリは、画像ファイルアップロードの際に、
そのため、capistranoでアプリのコードをアップデートした場合でも、全releaseファイルで共有したいディレクトリがそれぞれ、公開ディレクトリに1つ、非公開ディレクトリに1つある。この2つのディレクトリをsharedに置いて、currentディレクトリにリンクを張るというのがタスクでやりたい。
上の呼出関係を見ると今回やりたいタスクに関しては、finalize_updateの前後(かつfinalize_updateとほとんど同じ仕組み)がよいみたい。というわけで、config/deploy.rbに下のような感じのタスクを追加すればよい。すごく便利。
set :public_uploaded_dir, "public/uploaded" set :private_uploaded_dir, "private/uploaded" task :after_finalize_update, :except => { :no_release => true } do some path'" run <<-CMD rm -rf #{latest_release}/#{private_uploaded_dir} && rm -rf #{latest_release}/#{public_uploaded_dir} && ln -s #{shared_path}/#{private_uploaded_dir} \ #{latest_release}/#{private_uploaded_dir} && ln -s #{shared_path}/#{public_uploaded_dir} \ #{latest_release}/#{public_uploaded_dir} CMD end
Rails使いはじめて4ヶ月ぐらいはたったかな。たぶん、Rails開発環境の構築〜開発までは順調にきてたし、まあなんとでも作れる。ただ、開発に集中してて、サービス公開に関する部分は完全に抜けていた。本番環境の整備は最近やっと手を付けたところ。
さいわい、家に十分な数の実験用パソコンがあるからレンサバで実験してサーバに負荷かけて怒られるとか心配いらないからよい。自由に使いたいライブラリのインストール実験とかできる。結構これは経験値得るために重要。家に無駄にパソコンがあるとよい。ちなみにうちはサーバ、メインのレッツノート以外に、Thinkpadが6台、使ってないDesktopが2台w