Use envdir com Capistrano v3

Eu estava tentando usar envdir em uma implantação Capistrano, então precisei prefixar todos os comandos rake com envdir secret. Depois de uma hora examinando os códigos capistrano, vi que por trás de sua magia estava o sshkit .

O que fiz foi definir um after rvm:hookpara prefixar o rake da seguinte forma:

after 'rvm:hook', 'deploy:prefix_rake'

desc
'Overwrites the default rake command and adds a prefix'
task
:prefix_rake do
SSHKit.config.command_map[:rake] = "envdir secret #{ SSHKit.config.command_map[:rake] }"
end

O que command_mapfaz é definir o comando para ser executado quando você fizer isso execute :command. Deve ser um símbolo para fazê-lo funcionar.

Agora ele funciona bem com capistrano-rvm e configura o env vars antes de qualquer :rakeser executado.