5
5

More than 5 years have passed since last update.

Capistrano3で複数のリリースを一つにまとめようとしたが諦めた

Last updated at Posted at 2014-06-13

Capistrano3で複数コンポーネントのリリースを一つにまとめようとしたが諦めた。
ここでは諦めた理由をメモしておく。
db:migrateなど同一のタスクを利用する同じ種類のコンポーネントなら一つにはまとめられそうではある。

やりたかったこと

capistrano-multiconfigで以下のような感じで複数コンポーネントのリリースを1つにまとめてしまう。

$ cd cap-all
$ cap app:staging deploy # rails app リリース
$ cap static:staging deploy # 非rails static リリース

諦めた理由

capistranoでは以下のような順番で処理が行われる(該当コード)。
1. 定義されたload:defaultsタスクで初期値読み込みなど(19行目)
2. 指定されたconfig読み込み(34行目から)

例えばbundle installをするためのcapistrano/bundlerはタスク定義とload:defaultによる初期値設定が同じファイルで定義されている(該当コード)。
このため

  • 1.の処理前にcapistrano/bundlerをrequireするとタスクが定義されタスク間のhookが決められてしまう。
    • (bundleが必要なコンポーネントとそうでないコンポーネントがある場合でも、共通でbundleのタスクが実行されてしまう)。
  • configでrequireするとタスクとタスク間のhookはわけられるが、load:defaultsタスクが実施されないため初期値が定義されない。

上記どちらの方法も対応は可能だと思うが複雑になりそうだと思ったので諦めた。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5