Carregar Assets do Resque Quando X-Sendfile Header Estiver Ativo

O Rails recomenda que usemos o Apache ou Ngnix para servir os assets estáticos quando em produção, isso pode ser feito habilitando a diretiva x_sendfile_header como mostra o Rails Guides.

O problema é que ao ativar essa diretiva, os assets param de ser servidos na interface web do Resque.

Uma solução é criar uma tarefa no arquivo de configuração de deploy (deploy.rb) do Capistrano (ou do Mina) que possa copiar os assets estáticos da pasta do Resque para a pasta pública (mais especificamente /public/resque) de nossa aplicação:

Capistrano:
after "deploy:restart", "deploy:cleanup", "deploy:copy_resque_assets"

namespace :deploy do
  desc 'Copy resque-web assets into public folder'
  task :copy_resque_assets do
    target = File.join(release_path, 'public', 'resque')
    run "cp -r `cd #{release_path} && bundle show resque`/lib/resque/server/public/* #{target}"
  end
end
Observe que eu adiciono a tarefa criada no método after para que possa ser executada depois do deploy.
Mina:
queue "cp -r `cd #{deploy_to}/#{current_path} && bundle show resque`/lib/resque/server/public/* #{File.join(deploy_to, current_path, 'public', 'resque')}"

Agora é só fazer um deploy e ver o resultado:

Written on August 23, 2013

Share: