25

Tengo una aplicación Rails 3.2.1 en ejecución, que estoy implementando a través de Capistrano con el deploy/assets que ejecuta la tarea deploy:assets:precompile.¿Cómo puedo hacer que los activos de Rails 3 precompilen más rápido?

Todo funciona bien, excepto que la compilación en sí es muy lenta. No tengo tanto CSS y JavaScript (alrededor de 8200 líneas en total).

En general, demora unos 1-3 minutos en compilar los activos, que es aproximadamente el 90% de todo el tiempo de implementación.

¿Hay alguna forma de optimizar esto? ¿Tal vez usar un procedimiento diferente para compilar los activos o de alguna manera optimizarlo?

Estoy ejecutando la aplicación en Linode 512 en 1.9.2-p290, Rails 3.2.1 y utilizando therubyracer gema si eso tiene alguna relevancia.

+0

compilarlo en el servidor más rápido y confirmarlo después de esta compilación. – shingara

+0

¿En qué has configurado config.assets.initialize_on_precompile? –

Respuesta

21

Esta no es una respuesta para hacerlo funcionar más rápido, pero en lo que se refiere a un "procedimiento diferente", puede decirle a Capistrano que solo precompile los activos cuando haya realizado algún cambio en sus activos. Desea hacer una tarea personalizada assets:precompile, como esta, que vería los registros de git entre el código existente y el recién implementado. Para mí, esto funcionó muy bien y ahora sólo tiene que lidiar con el despliegue lento cuando la actualización de los activos:

namespace :deploy do 
    namespace :assets do 
    task :precompile, :roles => :web, :except => { :no_release => true } do 
     from = source.next_revision(current_revision) 
     if capture("cd #{latest_release} && #{source.local.log(from)} vendor/assets/ app/assets/ | wc -l").to_i > 0 
     run %Q{cd #{latest_release} && #{rake} RAILS_ENV=#{rails_env} #{asset_env} assets:precompile} 
     else 
     logger.info "Skipping asset pre-compilation because there were no asset changes" 
     end 
    end 
    end 
end 

Fuente: http://www.bencurtis.com/2011/12/skipping-asset-compilation-with-capistrano/

16

que acabo de escribir una joya para resolver este problema dentro de los carriles, llamados turbo-sprockets-rails3 . Acelera su assets:precompile compilando solo los archivos cambiados, y solo compilando una vez para generar todos los activos. Funciona de la caja para Capistrano, ya que su directorio de activos se comparte entre versiones.

Sería increíble si pudiera ayudarme a probar la gema turbo-sprockets-rails3, y avíseme si tiene algún problema.

Cuestiones relacionadas