2012-02-27 19 views
6

ho questo compito Capistrano:Rails 3.2.1, risorse precompilate due volte sulla distribuzione?

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" 

So che c'è load 'deploy/assets' ma sto cercando di capire cosa sta succedendo qui.

Sto distribuzione su un Amazon EC2 m1.small esempio, che a quanto pare ha costantemente il 50% della CPU rubare tempo, verificata con top. Questo porta ad un aumento del tempo per la compilazione beni, ma hanno uno sguardo a questo:

[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 

A parte il folle quantità di tempo speso per precompilare le attività per qualche motivo posso dire che li sta compilando due volte. Perché?

Sto usando Rails 3.2.1. Qualcuno può dare qualche idea su cosa sta succedendo qui? È destinato?

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 

risposta

10

load 'deploy/assets' precompiles automaticamente le risorse per voi nella parte appropriata del deploy in modo non è necessario definire un compito precompilazione. È possibile rimuovere entrambe le attività di precompilazione e after "deploy:finalize_update", "deploy:precompile".

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

edit: In Rails di default creerà i file impronte digitali e file non-impronte digitali quando si è digerire impostata su true. In realtà non esegue l'intera attività di precompilazione due volte, ma esegue solo un'attività per ogni situazione.

Se si desidera disabilitare completamente la generazione dei file senza impronte digitali, è possibile ignorare l'attività 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 linea commentata è la linea 66 qui:

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

+0

ho detto nel mio domanda che so di questo compito Capistrano. L'ho spento perché 1) ho problemi con esso e sprite 2) volevo verificare chiaramente cosa sta succedendo. – kain

+0

Ho aggiornato la mia risposta con qualche altro dettaglio. – James

+2

grazie; anche se eseguire un compito per ogni "situazione" mi sembra sciocco, perché i binari della terra non possono controllare le opzioni e agire di conseguenza eseguendo solo un compito è al di là di me ... se hai altre informazioni su cosa digerire, non più, o perché qualcuno vorrebbe non digerire e roba, per favore condividi. – kain

Problemi correlati