capistrano
複数のRailsアプリで構成されるシステムがあって、そのバージョン管理はやっぱりリリースブランチの下にアプリがある感じになり、デプロイ作業が面倒くさいので、とりあえず.rbスクリプトからsvn呼び出してゴリゴリやればいいやと思っていたら、だんだん面倒くさくなってきて、やっぱり「こんな作業どこのプロジェクトでもやってるんじゃねーの?」という気が募ってきて、前から知ってはいたけどRails勉強会に行った方のエントリを見て、俺も俺も、という ミーハーな感じで手を出してます。
http://www.machu.jp/diary/20070218.html
勉強になるっす。ありがとうございます。
携帯
Railsにきっと携帯対応してくれるプラグインとかあるはずだよねーなんて職場で話していたくせに全然探してなかったけど、capistranoを追っかけてたらこんなのを見つけました。
mobile_view.rb
http://www.kbmj.com/tech/index.php?catid=32&blogid=1
この説明によると、機種の判別にはjpmobileというのを使ったほうがいいらしい。
IE一括インストール
・IE3から6までを一括インストールしてくれるMultipleIE
http://tredosoft.com/Multiple_IE
紹介記事
http://phpspot.org/blog/archives/2007/01/ie3ie7multiplei.html
IE3を見て懐かしいと思ったら、IE4は起動に失敗したり、IE5.5はAjaxなページで落ちたりしましたが、IE6はちゃんと動いてるっぽいです。
Continuous Integration
Capistranoをインストールしてデプロイを楽したいついでに、やっぱりテストも楽したい。というわけでCIツールを探してみました。
Cerberus
http://cerberus.rubyforge.org/
http://rashkovskii.com/articles/2007/1/10/continuous-integration-cerberus
continuous_builder Plugin
http://www.ryandaigle.com/articles/2006/05/24/continuous-integration-w-rails
http://jayfields.blogspot.com/2006/07/ruby-continuous-integration.html
CIA
http://poocs.net/2005/5/22/setting-up-cia-continuous-integration-automater
CIツールじゃないけどZenTestは必須ね。
http://www.zenspider.com/ZSS/Products/ZenTest/
capistranoメモ
ディレクトリ構造
/path/to/project /capistrano /current -> /path/to/project/capistrano/releases/20070220043413 /releases /20070220043413 /app ・・・ /log -> /path/to/project/capistrano/shared/log /public ・・・ /system -> /path/to/project/capistrano/shared/system /tmp /pids -> /path/to/project/capistrano/shared/pids /shared /log /pids /system /trunk /app ・・・
とりあえず、こんな感じで使ってみてます。作り方はこんな感じ。
$ mkdir /path/to/project $ cd /path/to/project $ svn checkout /url/to/repository/・・・/trunk ./trunk $ cap setup
あ、config/deploy.rb には予め適切な設定を入れておいてください。
mongrel_cluster.yml
--- cwd: /path/to/project/capistrano/current port: "8000" environment: production address: localhost pid_file: tmp/pids/dispatch.pid servers: 3
ポイントはpid_fileの指定。指定しないと/path/to/project/capistrano/current/logに出力するので、
rake deploy
で自動的に再起動してくれません。ちなみに、dispatch.[0-9]*.pid という形式じゃないとダメみたいです。
疑問点
とりあえず、これだけでも便利かなーという気はしますが、いくつか疑問が。
- 複数のRailsアプリなどを一つのリリースに入れて、それぞれdeployしたい時って、どんな風にディレクトリを作ればいいの?
- config/deploy.rbにはsvnのURLとしてtrunkのをとりあえず設定したので、リリースによって変更したいんだけどどうするべき?
/path/to/project/branches/RB-xxxxx を自分でチェックアウトしてそこから rake deployするべきなのかな?
- tmp/sessions は shared/sessions とかにsymlinkしてくれないの?
capistranoのrakeタスク
rake deploy # Push the latest revision into production (delegates to remote:deploy) rake remote:cleanup # Removes unused releases from the releases directory. rake remote:cold_deploy # Used only for deploying when the spinner isn't running. rake remote:deploy # A macro-task that updates the code, fixes the symlink, and restarts the application servers. rake remote:deploy_with_migrations # Similar to deploy, but it runs the migrate task on the new release before updating the symlink. rake remote:diff_from_last_deploy # Displays the diff between HEAD and what was last deployed. rake remote:disable_web # Disable the web server by writing a "maintenance.html" file to the web servers. rake remote:enable_web # Re-enable the web server by deleting any "maintenance.html" file. rake remote:exec # Execute a specific action using capistrano rake remote:invoke # A simple task for performing one-off commands that may not require a full task to be written for them. rake remote:migrate # Run the migrate rake task. rake remote:restart # Restart the FCGI processes on the app server. rake remote:rollback # A macro-task that rolls back the code and restarts the application servers. rake remote:rollback_code # Rollback the latest checked-out version to the previous one by fixing the symlinks and deleting the current release from all servers. rake remote:set_permissions # Sets group permissions on checkout. rake remote:setup # Set up the expected application directory structure on all boxes rake remote:shell # Begin an interactive Capistrano session. rake remote:show_tasks # Enumerate and describe every available task. rake remote:spinner # Start the spinner daemon for the application (requires script/spin). rake remote:symlink # Update the 'current' symlink to point to the latest version of the application's code. rake remote:update # Updates the code and fixes the symlink under a transaction rake remote:update_code # Update all servers with the latest release of the source code. rake remote:update_current # Update the currently released version of the software directly via an SCM update operation rake rollback # Rollback to the release before the current release in production (delegates to remote:rollback)
rollback便利そう、ミスったりしたときとか。rake remote:disable_web/enable_web とか。
rake remote:diff_from_last_deploy でリリースにちゃんと変更箇所が含まれているかどうかを確認したりとか。