Fabricは直列、Capistranoは並列


Fabric でも Capistrano でも

run("echo stop")
run("echo modify")
run("echo start")

っていう感じで書けるんですが、複数サーバで実行する場合の順序が全然違うので要注意です。ロードバランサから外して、更新して、戻すなんてことを考えてると、Capistrano で死にます。

Fabric の場合:

  • サーバAをロードバランサから外す
  • サーバAを更新する
  • サーバAをロードバランサに戻す
  • サーバBをロードバランサから外す
  • サーバBを更新する
  • サーバBをロードバランサに戻す

Capistrano の場合:

  • サーバAをロードバランサから外す
  • サーバBをロードバランサから外す
  • サーバAを更新する
  • サーバBを更新する
  • サーバAをロードバランサに戻す
  • サーバBをロードバランサに戻す

Capistrano で Fabric の実行順序にするきれいな方法があればいいんですが。きれいな、というからには、汚い方法はあって、Can Capistrano Execute Tasks on Hosts Consecutively? - Stack Overflow にいくつかの解決策が示されています。でもなー、これ cap っぽくないよなー、うーん。