2012-07-15 13 views
10

He visto varias soluciones intrincadas y generalmente ineficaces para realizar la precompilación de activos perezosos en Rails. Como desarrollador de back-end, no quiero recompilar recursos que nunca toco cada vez que se despliega el programa, pero como los activos se cargan en Capfile a través de load 'deploy/assets', y no definiendo una tarea en deploy.rb, no puedo pensar en una forma de deshabilitarlo condicionalmenteDesactivar condicionalmente la precompilación de activos en Capistrano

El comportamiento que busco es utilizar cap deploy para la implementación regular con precompilación, y usar cap deploy:no_assets para omitir la implementación de activos.

Respuesta

7

rails4 soluciona este problema con su nueva versión de piñones, solo precompilando activos que han cambiado. Mientras tanto, para tus aplicaciones rails3, recomiendo la gema turbo-sprockets-rails3.

Esta joya que comenzó como una set of patches para sprockets-rails por Nathan Broadbent, que no se fusionaron en master porque el problema ya se abordó en rails4. Desde el README:

  • acelera su Rails 3 Activos rastrillo: precompilación por activos solamente volver a compilar cambiado, sobre la base de un hash de los archivos de origen

  • solo compila una vez para generar tanto las huellas digitales y no activos -fingerprinted

Y:

turbo-sprockets-rails3 debería funcionar de la caja con la última versión de Capistrano.

Puedo confirmar que funciona bien para mí en las aplicaciones rails-3.2.x que se despliegan con Capistrano.

Como nota al margen para GitHubbers, el original pull request es un excelente ejemplo de cómo enviar código a un proyecto de código abierto, incluso si no se fusionó.

+1

¡Acabo de cambiar a esto y puedo atestiguar que es genial! – RubberDucky

+2

Tengo Rails 4.0 y no cambio ningún activo pero simplemente recompila todo desde cero. ¿Alguna idea? – scaryguy

1

Esta GIST parece muy prometedor https://gist.github.com/3072362

Se comprueba su git log del último despliegue de ahora para ver si hay algún cambio en %w(app/assets lib/assets vendor/assets Gemfile.lock config/routes.rb) y si es así, sólo precompila a continuación.

+0

He instalado esta esencia y otras similares, pero no parece haber tenido ningún efecto. Si dejo 'load 'deploy/assets' en mi capfile, no detiene la precompilación cuando no es necesario. Si saco 'load 'deploy/assets'', no precompila incluso cuando lo necesita. Incluso con un disparador adicional para activarlo después de la actualización del código. – RubberDucky

+0

Creo que es posible que no necesite esta esencia en su archivo config/deploy.rb. Sobrescribe la implementación: activos: tarea de precompilación. Debes mantener 'load 'deploy/assets'' en tu Capfile. –

+0

Esto es aún más rápido que los rieles turbo-sporocket, ya que omite toda la verificación, lo que me lleva minutos. – lulalala

14

dos turbo-sporocket-carriles y los que los scripts auto-skip tienen algunas trampas (que mencionaré más adelante). Por lo tanto, utilizar este truco, por lo que puede pasar un parámetro para saltar precompilación activo a mi voluntad:

callback = callbacks[:after].find{|c| c.source == "deploy:assets:precompile" } 
callbacks[:after].delete(callback) 
after 'deploy:update_code', 'deploy:assets:precompile' unless fetch(:skip_assets, false) 

Este script va a cambiar el gancho activo-precompilación incorporado, por lo que se le enganchó en base a el parámetro skip_assets. Puedo llamar al cap deploy -S skip_assets=true para omitir la precompilación de activos como un todo.


Para mí, los rieles turbo-sporocket todavía tardan unos minutos en verificarse cuando nada ha cambiado.Esto puede ser crucial cuando necesito enviar una solución al servidor lo antes posible. Por lo tanto, necesito mi método de salto de fuerza.

+0

¿Dónde exactamente agrega este código para que funcione? –

+0

@dtmunir Lo agregué cerca del final del archivo deploy.rb. – lulalala

+0

Esta es una gran solución. En una aplicación Rails 4 con Capistrano 2 y todavía funciona. Solo debe tener cuidado de no tener ningún otro trabajo encadenado de 'implementar: activos: precompilar' o también se omitirán. –

Cuestiones relacionadas