À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'