2013-03-13 12 views
15

ho notato il mio patrimonio sembrano avere compilato due volte, che rallenta notevolmente il mio schieramento, come questo passaggio è la più part-time lunghi:Perché le mie risorse Rails vengono precompilate due volte?

~/projects/rewportal(mapwidget ✔) rake assets:precompile 
/home/ruy/.rvm/rubies/ruby-1.9.3-p194/bin/ruby /home/ruy/.rvm/gems/[email protected]/bin/rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets 
AssetSync: using /home/ruy/projects/rewportal/config/initializers/asset_sync.rb 
AssetSync: using /home/ruy/projects/rewportal/config/initializers/asset_sync.rb 
AssetSync: Syncing. 
Using: Directory Search of /home/ruy/projects/rewportal/public/assets 
Uploading: assets/application-5170f52c1dd49cb382d5135bee01d75e.js 
[...] 
Fetching files to flag for delete 
Flagging 8 file(s) for deletion 
Deleting: assets/active_admin-4ce46d089d4b0080e87c9abcb6fa6c97.css 
[...] 
AssetSync: Done. 

E 'normale?

Quando ho precompilare in altri ambienti (non di produzione), posso vedere l'elaborazione dettagliata di ciascun bene due volte:

~/projects/rewportal(mapwidget ✔) rake RAILS_ENV=qa assets:precompile --trace 
** Invoke assets:precompile (first_time) 
** Execute assets:precompile 
/home/ruy/.rvm/rubies/ruby-1.9.3-p194/bin/ruby /home/ruy/.rvm/gems/[email protected]/bin/rake assets:precompile:all RAILS_ENV=qa RAILS_GROUPS=assets --trace 
** Invoke assets:precompile:all (first_time) 
** Execute assets:precompile:all 
** Invoke assets:precompile:primary (first_time) 
** Invoke assets:environment (first_time) 
** Execute assets:environment 
AssetSync: using /home/ruy/projects/rewportal/config/initializers/asset_sync.rb 
** Invoke tmp:cache:clear (first_time) 
** Execute tmp:cache:clear 
** Execute assets:precompile:primary 
Compiled gmaps4rails/gmaps4rails.base.js (141ms) (pid 8480) 
Compiled gmaps4rails/gmaps4rails.googlemaps.js (148ms) (pid 8480) 
[...] 
Compiled active_admin.css (1299ms) (pid 8480) 
Compiled active_admin/print.css (113ms) (pid 8480) 
** Invoke assets:precompile:nondigest (first_time) 
** Invoke assets:environment (first_time) 
** Execute assets:environment 
AssetSync: using /home/ruy/projects/rewportal/config/initializers/asset_sync.rb 
** Invoke tmp:cache:clear (first_time) 
** Execute tmp:cache:clear 
** Execute assets:precompile:nondigest 
Compiled gmaps4rails/gmaps4rails.base.js (133ms) (pid 8480) 
Compiled gmaps4rails/gmaps4rails.googlemaps.js (133ms) (pid 8480) 
[...] 
Compiled active_admin.css (1290ms) (pid 8480) 
Compiled active_admin/print.css (116ms) (pid 8480) 
AssetSync: Syncing. 
Using: Directory Search of /home/ruy/projects/rewportal/public/assets 
Uploading: assets/active_admin-d05b61ab8366b74eabc9074d3e60fe82.css.gz 
[...] 
Fetching files to flag for delete 
Flagging 6 file(s) for deletion 
Deleting: assets/active_admin-ec90e7d9a9f45f14d1387f58fa1452b4.css 
[...] 
AssetSync: Done. 

mio application.rb ha le seguenti:

config.assets.precompile += %w(active_admin/print.css active_admin.css active_admin.js admin.js admin.css html5shiv.js) 

idee?

+0

Penso che questo non sia normale. Prova a usare ** foreman start ** sull'host locale. –

+0

Quindi sembra che non sia specifico per Heroku. Ho eseguito il 'rake assets: precompile' e lo ha fatto anche due volte. Aggiornerò il titolo e i dettagli. –

+0

Hanno lo stesso identico problema. Tutto funziona, ma sembra uno spreco farlo funzionare due volte. – MoMolog

risposta

1

Stai utilizzando capistrano? Se è così, si può provare a compilare le risorse a livello locale, e poi caricare sul server, con un compito come questo

namespace :deploy do 
    namespace :assets do 
    desc "Precompile assets on local machine and upload them to the server." 
    task :precompile, roles: :web, except: {no_release: true} do 
     run_locally "bundle exec rake assets:precompile" 
     find_servers_for_task(current_task).each do |server| 
     run_locally "rsync -vr --exclude='.DS_Store' public/assets #{user}@#{server.host}:#{shared_path}/" 
     end 
    end 
    end 
end 
0

ho sovrascrivere il compito deploy_all all'interno deploy.rb per compilare prima di caricare:

task :remake_all do 
    puts "precompiling assets" 
    res = `env rake assets:precompile:all RAILS_ENV=precompile RAILS_GROUPS=assets 2>&1` 

    $stderr.puts "assets res is: #{res}" 
    if res =~ /aborted|don't|invalid|segmentation|bug/i 
    puts "############ Unable to compile assets #########" 
    exit 
    end 
end 

Avevo problemi con l'ambiente di sviluppo che non compilava correttamente e l'ambiente di produzione che necessitava di accesso ai server mysql dietro un firewall, quindi ho creato un nuovo ambiente chiamato: precompilato

11

Rails 3 di default compila una volta per generare risorse impronte digitali, e una volta pergenerare asset non fingerprint (quelli con impronta digitale hanno l'hash MD5 nel nome file).

È possibile utilizzare turbo-sprockets-rails3 gem per creare entrambi da una compilation.

In rotaie 4, questa funzionalità è stata estratta in sprockets-rails gem e il comportamento è stato modificato, in modo che il doppio compilazione non accade nelle rotaie 4.

0

La soluzione per me (Rails 3) era correre rake assets:precompile:primary anziché rake assets:precompile:all.

Problemi correlati