2012-02-27 11 views
6

tengo esta tarea Capistrano:Rails 3.2.1, activos precompilados dos veces en la implementación?

namespace :deploy do 
    task :precompile, :role => :app do 
    run "cd #{release_path}/ && RAILS_ENV=staging bundle exec rake assets:precompile --trace" 
    end 
end 

after "deploy:finalize_update", "deploy:precompile" 

Sé que hay load 'deploy/assets' pero estoy tratando de entender lo que está pasando aquí.

estoy desplegar en un Amazon EC2 ejemplo m1.small, que al parecer tiene constantemente 50% de la CPU robar tiempo, verificado con top. Esto conduce a un mayor tiempo para la compilación de los activos, pero echar un vistazo a esto:

[23.21.xxx.xx] rvm_path=$HOME/.rvm/ $HOME/.rvm/bin/rvm-shell 'ruby-1.9.3-p125' -c 'cd /home/ubuntu/apps/myapp-rails/releases/20120227020245/ && RAILS_ENV=staging bundle exec rake assets:precompile --trace' 
** [out :: 23.21.xxx.xx] ** Invoke assets:precompile (first_time) 
** [out :: 23.21.xxx.xx] ** Execute assets:precompile 
** [out :: 23.21.xxx.xx] /home/ubuntu/.rvm/rubies/ruby-1.9.3-p125/bin/ruby /home/ubuntu/apps/myapp-rails/shared/bundle/ruby/1.9.1/bin/rake assets:precompile:all RAILS_ENV=staging RAILS_GROUPS=assets --trace 
** [out :: 23.21.xxx.xx] ** Invoke assets:precompile:all (first_time) 
** [out :: 23.21.xxx.xx] ** Execute assets:precompile:all 
** [out :: 23.21.xxx.xx] ** Invoke assets:precompile:primary (first_time) 
** [out :: 23.21.xxx.xx] ** Invoke assets:environment (first_time) 
** [out :: 23.21.xxx.xx] ** Execute assets:environment 
** [out :: 23.21.xxx.xx] ** Invoke environment (first_time) 
** [out :: 23.21.xxx.xx] ** Execute environment 
** [out :: 23.21.xxx.xx] ** Invoke tmp:cache:clear (first_time) 
** [out :: 23.21.xxx.xx] ** Execute tmp:cache:clear 
** [out :: 23.21.xxx.xx] ** Execute assets:precompile:primary 
** [out :: 23.21.xxx.xx] ** Invoke assets:precompile:nondigest (first_time) 
** [out :: 23.21.xxx.xx] ** Invoke assets:environment (first_time) 
** [out :: 23.21.xxx.xx] ** Execute assets:environment 
** [out :: 23.21.xxx.xx] ** Invoke environment (first_time) 
** [out :: 23.21.xxx.xx] ** Execute environment 
** [out :: 23.21.xxx.xx] ** Invoke tmp:cache:clear (first_time) 
** [out :: 23.21.xxx.xx] ** Execute tmp:cache:clear 
** [out :: 23.21.xxx.xx] ** Execute assets:precompile:nondigest 
    command finished in 958131ms 

Aparte del loco cantidad de tiempo dedicado a la precompilación activos por alguna razón puedo decir que les está compilando dos veces. ¿Por qué?

Estoy usando Rails 3.2.1. ¿Puede alguien ofrecer alguna información sobre lo que está sucediendo aquí? ¿Es intencional?

staging.rb 

    # Compress JavaScripts and CSS 
    config.assets.compress = true 

    # Don't fallback to assets pipeline if a precompiled asset is missed 
    config.assets.compile = false 

    # Generate digests for assets URLs 
    config.assets.digest = true 

Respuesta

10

load 'deploy/assets' Precompila automática de la masa para que en la parte apropiada del despliegue de modo que no es necesario definir una tarea de compilación previa. Puede eliminar su tarea de precompilación y after "deploy:finalize_update", "deploy:precompile".

https://github.com/capistrano/capistrano/blob/master/lib/capistrano/recipes/deploy/assets.rb

edición: Por defecto Rails creará archivos de huellas digitales y archivos que no disponen de firma digital cuando haya digerir establecido en true. En realidad, no ejecuta toda la tarea de precompilación dos veces, solo ejecuta una tarea para cada situación.

Si desea deshabilitar la generación de archivos sin huellas digitales por completo, puede anular la tarea assets:precompile:all.

Rake::Task['assets:precompile:all'].clear 
namespace :assets do 
    namespace :precompile do 
    task :all do 
     Rake::Task['assets:precompile:primary'].invoke 
     # ruby_rake_task("assets:precompile:nondigest", false) if Rails.application.config.assets.digest 
    end 
    end 
end 

La línea comentada es la línea 66 aquí:

https://github.com/rails/rails/blob/master/actionpack/lib/sprockets/assets.rake

+0

he mencionado en mi pregunta, que yo sepa acerca de esta tarea Capistrano. Lo apagué porque 1) Tengo problemas con él y sprites 2) Quería verificar claramente qué está pasando. – kain

+0

He actualizado mi respuesta con más detalles. – James

+2

gracias; aunque ejecutar una tarea para cada 'situación' me parece tonto, ¿por qué en la tierra los rieles no pueden verificar las opciones y actuar en consecuencia ejecutando solo una tarea que está más allá de mí ... si tienes cualquier otra información sobre qué digerir, ndigerir, primaria o por qué alguien querría no digerir y esas cosas, por favor comparte. – kain

Cuestiones relacionadas