2012-09-04 16 views
9

Ho un problema sul mio server di produzione dove assetic:dump sta scadendo su una distribuzione di Capifony (ma non sempre).È possibile compilare Symfony2 assetic: eseguire il dump e distribuire quello invece di eseguirlo sul server?

In esecuzione assetic:dump localmente va bene. Anche la distribuzione su un diverso server di staging (molto meno potente) va bene.

Per risolvere questo problema (e accelerare l'implementazione), mi chiedevo se è possibile eseguire assetic:dump prima di una distribuzione e inviare semplicemente quelle risorse rispettate insieme al resto della distribuzione?

+0

Hai provato la mia soluzione? Credo che sia il mio miglior contributo a S.O., quindi sarei felice di averlo accettato se funzionasse :-) – Julien

risposta

7

Questo è un po 'complicato, sto anche cercando di farlo (java non funziona correttamente sul mio server, quindi la distribuzione fallisce).

Il problema è che Capifony distribuisce da un repository di controllo di origine e in genere le risorse scaricate non si trovano nel repository (e non dovrebbero).

Quindi immagino che l'unico modo per farlo sia quello di creare un'attività Capistrano (Capifony è basata su Capistrano) che scaricherà le risorse e le sincronizzerà sul server.

Edit: Ecco il mio tentativo Edit: funziona, ho usato da quando ho risposto alla domanda.

Sono sicuro che ci sono molti miglioramenti possibili, non sono un ragazzo rubino, non sono neanche un ragazzo di sceneggiatura.

Nel vostro deploy.rb è possibile aggiungere due compiti:

before "deploy:update_code", "deploy:dump_assetic_locally" 
after "deploy:update_code", "deploy:rsync_local_assets_to_server" 

E il codice associato a tali compiti (nello stesso file):

namespace :deploy do 
    task :dump_assetic_locally, :roles => :web do 
    run_locally "php app/console assetic:dump --env=prod" 
    end 

    task :rsync_local_assets_to_server, :roles => :web do 
    finder_options = {:except => { :no_release => true }} 
    find_servers(finder_options).each {|s| run_locally "rsync -az --delete --rsh='ssh -p #{ssh_port(s)}' #{local_web_path}/js/ #{rsync_host(s)}:#{release_path}/web/js/" } 
    find_servers(finder_options).each {|s| run_locally "rsync -az --delete --rsh='ssh -p #{ssh_port(s)}' #{local_web_path}/css/ #{rsync_host(s)}:#{release_path}/web/css/" } 
    end 

    def local_web_path 
    File.expand_path("web") 
    end 

    def rsync_host(server) 
    :user ? "#{user}@#{server.host}" : server.host 
    end 

    def ssh_port(server) 
    server.port || ssh_options[:port] || 22 
    end 

end 
0

Il comando assetic:dump preleva le risorse da tutti i pacchetti disponibili nell'ambiente corrente e li inserisce in web/bundles (o dove lo si dice). Non dovrebbe esserci alcun problema nel farlo localmente e quindi semplicemente spostando i file.

È necessario eseguire il comando con l'opzione env=prod per garantire che vengano generati tutti i bundle necessari nella produzione. Inoltre, prima di eseguire il comando, è necessario pulire lo web/bundles in modo che le risorse per i pacchetti utilizzati solo nello sviluppo (ad es. Profiler) non siano presenti.

Vorrei semplicemente eseguire un test eseguendo il comando localmente, scaricare le risorse dalla produzione e confrontarle. Non riesco a pensare a niente adesso dato che css e js sono serviti al client e non dovrebbero essere diversi quando generati su macchine diverse, ma potrei sbagliarmi.

+0

quindi come può essere fatto con Capifony? – ed209

-1

è molto semplice aggiungere alla vostra deploy.rb

set :dump_assetic_assets, true 
Problemi correlati