-
Notifications
You must be signed in to change notification settings - Fork 4
chefのdeployリソースを使ってみる
mechamogera edited this page Aug 29, 2012
·
11 revisions
[release dir]
|-- current -> [release dir]/releases/20120829044144
|-- releases
| |-- 20120829040421
| |-- 20120829042522
| |-- 20120829043409
| |-- 20120829043514
| `-- 20120829044144
`-- shared
- shared
- リリース毎のコードに依存しない設定ファイルや一時ファイルを管理する
- ユーザが管理する必要がある
- railsアプリだと一般的にはconfig、log、pids、systemディレクトリあたりが存在することになる
- releases
- 最新の5つのデプロイしたアプリを保持する
- デプロイプロセスが作成する
- current
- 現在のリリースバージョンへのリンク
- デプロイプロセスが作成する
- デプロイはcheckout、migrate、symlink、restartの4つのフェーズを実行する
- checkout
- 指定されたリビジョンをSCMリソースを使って取得する。
- SCMリソースは取得したコードをshared/cached-copyに配置し、releasesにコピーする
- migrate
- migrateが実行されるなら、Chefはデータベース設定ファイルのsharedからreleasesに配置したコードへのシンボルリンクを作成する
- railsアプリでは、migration_commandは一般的にrake db:migrateに設定される
- symlink
- releasesに配置したコードから特定のディレクトリを消してsharedからリンクをはる(デフォルトはlog、tmp/pid、public/system)
- ユーザがsharedにリンクするディレクトリを用意する必要がある
- 完了したらreleasesからcurrentにシンボルリンクされる
- restart
- レシピのリスタートコマンドに従ってアプリがリスタートされる
%w{sqlite-devel}.each do |package_name|
package package_name do
action :install
end
end
directory "/var/hoge" do
owner "hoge"
group "hoge"
action :create
end
deploy "/var/hoge" do
repo "http://hoge/fisheye/git/hoge.git"
user "hoge"
group "hoge"
environment "RAILS_ENV" => "development"
action :deploy
restart_command "touch tmp/restart.txt"
symlink_before_migrate "db/development.sqlite3" => "db/development.sqlite3"
migrate true
migration_command "rake db:migrate"
before_migrate do
execute "db-migrate" do
user "hoge"
group "hoge"
command "cd #{release_path} && bundle install --path #{File.expand_path("../../shared/vendor/bundle", release_path)}"
action :run
end
end
end