世界線航跡蔵

Mad web programmerのYuguiが技術ネタや日々のあれこれをお送りします。

2007年04月23日

capistranoで時間差deployしたい

capistranoを導入して、周回遅れではてなと同じ問題にぶつかってる弊社【何】

id:secondlife said...

同時命令 - SwitchTower の影

10台サーバがあればすべて同時に restart

  • production でいきなり10台が再起動で数秒間落ちる
  • 時間差欲しい…

途中で1つ失敗すると全部ロールバック

  • タイミングにより httpd の restart が失敗する場合も
  • 9/10台成功してるけど、ロールバックする
    • 一台だけやり直したいのに!

これは公開してないぽい? はてなspecificではなくて、結構一般的な問題だと思うんだけど。

というわけで、明日か明後日あたりこれを書くか。

2007-05-06追記

時間差を付けて、

  • サーバーの半分をクラスタから切り離して処理
  • クラスタに戻す
  • 残り半分を自動的に残りを同じ手順で

とか考えてた。それでちょっと悩んだけど、良く考えたら半分だけデプロイした時点でクラスタに戻す前に実際にアクセスして確認したいし、全部自動で流れていってしまうのは好ましくない。

だから、クラスタを縮退して半分にデプロイしたあと、一度capコマンドは終了して、残り半分は手動でcapコマンドを再度走らせるのが望ましい挙動だった。だとすると、必要なのはユーザーが指定に応じて:app roleをマスキングする処理だ。あんまり難しいことは必要なかった。

config/deploy.rbの末尾にこんなのを足してみた。

if /\A\d+\.\.\.?\d+\Z/ =~ target
  roles[:app] = roles[:app][eval(target)]
end

これで、

% cap -S target=0...3 deploy

とかやると、app serverの0番目から2番目までにだけdeployを行なう。

トラックバック

http://yugui.jp/articles/610/ping

現在のところトラックバックはありません

コメント

blog comments powered by Disqus

ご案内

前の記事
次の記事

タグ一覧

過去ログ

  1. 2016年07月
  2. 2016年01月
  3. 2015年09月
  4. 2015年08月
  5. 過去ログ一覧

フィード

フィードとは

その他

Powered by "rhianolethe" the blog system