2012-02-27 9 views
6

Mam to zadanie Capistrano:Rails 3.2.1, zasoby prekompilowane dwukrotnie podczas wdrażania?

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" 

wiem, że nie ma load 'deploy/assets' ale staram się zrozumieć, co się tu dzieje.

mam wdrażania w Amazon EC2 m1.small instancji, który najwyraźniej stale 50% CPU ukraść czas, weryfikowanym przy top. Prowadzi to do zwiększonego czasu kompilacji aktywa, ale spojrzeć na to:

[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 

strzępy szalony ilości czasu spędzonego na prekompilacja aktywa z jakiegoś powodu mogę powiedzieć, że jest ich dwa razy kompilacji. Czemu?

Używam Rails 3.2.1. Czy ktoś może zaoferować wgląd w to, co się tutaj dzieje? Czy to jest przeznaczone?

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 

Odpowiedz

10

load 'deploy/assets' automatycznie precompiles aktywów dla Ciebie w odpowiedniej części Rozmieszczanie więc nie trzeba definiować zadania prekompilacji. Możesz usunąć zarówno zadanie prekompilacji, jak i after "deploy:finalize_update", "deploy:precompile".

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

edit: domyślnie Rails stworzy odciski palców i plików bez odcisków palców, gdy masz trawienie wartość true. W rzeczywistości nie uruchamia całego zadania prekompilacji dwa razy, po prostu uruchamia jedno zadanie dla każdej sytuacji.

Jeśli chcesz całkowicie wyłączyć generowanie plików bez odcisków palców, możesz przesłonić zadanie 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 

zakomentowanym linia 66 linia jest tutaj:

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

+0

wspominałem w moim pytaniu, że wiem o tym zadaniu Kapistrana. Wyłączyłem go, ponieważ 1) mam z tym problemy i sprite 2) Chciałem dokładnie sprawdzić, co się dzieje. – kain

+0

Zaktualizowałem swoją odpowiedź, podając więcej szczegółów. – James

+2

dzięki; chociaż uruchamianie jednego zadania dla każdej "sytuacji" wydaje mi się głupie, dlaczego na ziemi szyny nie mogą sprawdzić opcji i działają zgodnie z uruchomieniem tylko jednego zadania, to jest poza mną ... jeśli masz jakieś inne informacje na temat tego, co jest trawione, niedestowane, pierwotne lub dlaczego ktoś chciałby nie trawić i innych rzeczy, proszę, podziel się. – kain