SORU
26 Ocak 2012, PERŞEMBE


Varlık hızı:3.1/3.2 Capistrano dağıtım derleme ile Raylar

Benim dağıtımları yavaş, en az 3 dakika sürer. Dağıtma sırasında yavaş Capistrano görevi varlıklar:derleme. Bu muhtemelen toplam dağıtmak 99% zaman alır. Bunu nasıl hızlandırabilirim? Benim yerel makinede benim varlık derleme ve git benim repo eklemek gerekir?

Edit: benim uygulama Ekleme config.assets.initialize_on_precompile = false.rb dosya yarım dakika ile derleme kez düştü, ama hala yavaş.

CEVAP
26 Ocak 2012, PERŞEMBE


Fikir varlık değişiklik yapacak olsaydı zaten onları her zaman yeniden derlemek için gerek yok

Bu gıt ile bir dağıtım için solution that Ben Curtis propose:

 namespace :deploy do
      namespace :assets do
        task :precompile, :roles => :web, :except => { :no_release => true } do
          from = source.next_revision(current_revision)
          if releases.length <= 1 || 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

Burada başka bir yaklaşım varlık yaşına göre (https://gist.github.com/2784462) :

set :max_asset_age, 2 ## Set asset age in minutes to test modified date against.

after "deploy:finalize_update", "deploy:assets:determine_modified_assets", "deploy:assets:conditionally_precompile"

namespace :deploy do
  namespace :assets do

    desc "Figure out modified assets."
    task :determine_modified_assets, :roles => assets_role, :except => { :no_release => true } do
      set :updated_assets, capture("find #{latest_release}/app/assets -type d -name .git -prune -o -mmin -#{max_asset_age} -type f -print", :except => { :no_release => true }).split
    end

    desc "Remove callback for asset precompiling unless assets were updated in most recent git commit."
    task :conditionally_precompile, :roles => assets_role, :except => { :no_release => true } do
      if(updated_assets.empty?)
        callback = callbacks[:after].find{|c| c.source == "deploy:assets:precompile" }
        callbacks[:after].delete(callback)
        logger.info("Skipping asset precompiling, no updated assets.")
      else
        logger.info("#{updated_assets.length} updated assets. Will precompile.")
      end
    end

  end
end

Varlık yerel derleme için tercih ederseniz, bu görevi kullanabilirsiniz:

namespace :deploy do
  namespace :assets do
    desc 'Run the precompile task locally and rsync with shared'
    task :precompile, :roles => :web, :except => { :no_release => true } do
      from = source.next_revision(current_revision)
      if releases.length <= 1 || capture("cd #{latest_release} && #{source.local.log(from)} vendor/assets/ app/assets/ | wc -l").to_i > 0
        %x{bundle exec rake assets:precompile}
        %x{rsync --recursive --times --rsh=ssh --compress --human-readable --progress public/assets #{user}@#{host}:#{shared_path}}
        %x{bundle exec rake assets:clean}
      else
        logger.info 'Skipping asset pre-compilation because there were no asset changes'
      end
    end
  end
end 

Başka ilginç bir yaklaşım kullanarak olabilirgit kanca. Örneğin bu kod varlıklar herhangi bir farklılık varsa, dosyaları kontrol eder ve sonunda onları precompiles 9 ** ve güncel tamamlama eklemek için ekleyebilirsiniz.

#!/bin/bash

# source rvm and .rvmrc if present
[ -s "$HOME/.rvm/scripts/rvm" ] && . "$HOME/.rvm/scripts/rvm"
[ -s "$PWD/.rvmrc" ] && . "$PWD/.rvmrc"

# precompile assets if any have been updated
if git diff-index --name-only HEAD | egrep '^app/assets' >/dev/null ; then
  echo 'Precompiling assets...'
  rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets
  git add public/assets/*
fi

Eğer bu yaklaşımı kullanmaya karar verirseniz, muhtemelen config/environments/development.rb ekleyerek değiştirmeniz gerekir:

config.assets.prefix = '/assets_dev'

Kalkınma sırasında önceden derlenmiş varlıklar hizmet olmaz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • isupportthegosselins

    isupporttheg

    6 Aralık 2009
  • Jeremy Stark

    Jeremy Stark

    23 Mayıs 2010
  • ShotgunSandwichENT

    ShotgunSandw

    3 EKİM 2012