capistrano3 + git で submodule も一緒にデプロイしたい場合
生まれて初めて(?)git submodule を使った気がする。
capistrano3 で submodule を含むリポジトリをデプロイしようとすると、
submodule の内容は空っぽになってました。
capistrano2 だと、
set :git_enable_submodules, 1
これでいけるんだけど、、、と思って調べていたら、task を追加してあげるという方法があるらしい。
以下に、task のコードをそのまま引用。
namespace :git do desc 'Copy repo to releases' task create_release: :'git:update' do on roles(:all) do with fetch(:git_environmental_variables) do within repo_path do execute :git, :clone, '-b', fetch(:branch), '--recursive', '.', release_path end end end end end
これを、lib/capistrano/tasks/git.cap として保存する、と。
試したんだけど、なんかうまくいかない。なんでじゃ!と思って Capfile を見ると
末尾に以下のような記述があった。
# Loads custom tasks from `lib/capistrano/tasks' if you have any defined. Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }
拡張子が rake のファイルを読み込むようになってた。。
ということで、lib/capistrano/tasks/git.rake に名前を変更したら、うまくいったというお話。(´・ω・`)