2012-04-01 7 views
9

Ho questo in lib/task/foo.rake:Perché l'ottimizzazione dell'attività di Rake differisce tra il mio ambiente locale e la distribuzione su Heroku Cedar?

Rake::Task["assets:precompile"].enhance do 
    print ">>>>>>>> hello from precompile" 
end 
Rake::Task["assets:precompile:nondigest"].enhance do 
    print ">>>>>>>> hello from precompile:nondigest" 
end 

Quando eseguo rake assets:precompile localmente, entrambi i messaggi vengono stampati.

Quando spingo su heroku, viene stampato solo il messaggio non più preciso. Tuttavia, according to the buildpack, la spinta sta eseguendo esattamente lo stesso comando di quello che sono localmente.

Perché il miglioramento delle risorse di base: il caso di precompilazione non funziona su heroku ma funziona localmente?

risposta

6

Ho cercato in questo problema e ho scoperto che il comportamento della assets:precompile a seconda se RAILS_ENV e RAILS_GROUPS sono entrambi impostati o non dare un'occhiata a questo a livello locale.

# This works 
    → bundle exec rake assets:precompile RAILS_ENV=production 
    >>>>>>>> hello from precompile:nondigest 
    >>>>>>>> hello from precompile 

    # This works 
    → bundle exec rake assets:precompile RAILS_GROUPS=assets 
    >>>>>>>> hello from precompile:nondigest 
    >>>>>>>> hello from precompile 
    → 

    # This does not work :'(
    → bundle exec rake assets:precompile RAILS_ENV=production RAILS_GROUPS=assets 
    >>>>>>>> hello from precompile:nondigest 
    → 

Il problema deriva dal https://github.com/rails/rails/blob/3-2-stable/actionpack/lib/sprockets/assets.rake in invoke_or_reboot_rake_task metodo se si sostituisce la linea Rake::Task[task].invoke con ruby_rake_task task allora funziona come ci si aspetterebbe a. Ho cercato esattamente perché questo è, e non ho trovato il motivo.

Poiché entrambe le variabili sono impostate nel pacchetto di build Heroku, è possibile creare un pacchetto di build personalizzato senza impostare sia le impostazioni GROUP che ENV, anche se penso che sia eccessivo. In questo scenario dovresti essere in grado di migliorare assets:precompile:primary o assets:precompile:all e ottenere un risultato simile all'intenzione desiderata.

+1

Ho risorse avanzate: precompilato: non più preciso e sembra funzionare per me – Josh

2

Stai impostando RAILS_ENV=production e RAILS_GROUPS=assets?

Inoltre, secondo this post, Heroku non supporta le attività di compilazione di asset personalizzati ...

+0

L'ho impostato dove? –

Problemi correlati