Tarefa Capistrano para compilar tarefas localmente

Às vezes, não queremos desperdiçar recursos de compilação de CPU e memória na produção.

Com Capistrano, podemos facilmente compilar ativos em produção, incluindo esta linha em seu Capfile:

load 'deploy/assets'

Mas não queremos isso aqui.

Com esta pequena receita, baseada na postagem de Fernando Blat ( http://fernando.blat.es/post/12563486374/optimize-deploy-time-compiling-your-assets-locally ), podemos executar a pré-compilação localmente e, em seguida, enviá-los usando pure Capistrano DSL e ainda obter uma tarefa Capistrano fácil de ler / modificar 🙂

set :rails_env, 'production'

namespace
:assets do
desc
'Run the precompile task locally and rsync with shared'
task
:precompile do
run_locally
('rm -rf public/assets/*')
run_locally
("RAILS_ENV=#{rails_env} rake assets:precompile")
run_locally
('touch assets.tgz && rm assets.tgz')
run_locally
('tar zcvf assets.tgz public/assets/')
run_locally
('mv assets.tgz public/assets/')
end

desc
'Upload precompiled assets'
task
:upload_assets do
upload
"public/assets/assets.tgz", "#{release_path}/assets.tgz"
run
"cd #{release_path}; tar zxvf assets.tgz; rm assets.tgz"
end
end

before
'deploy:update_code', 'assets:precompile'
after
'deploy:create_symlink', 'assets:upload_assets'