2012-04-01 5 views
9

Ich habe dies in lib/Aufgaben/foo.rake:Warum unterscheidet sich die Rake-Aufgabenerweiterung in meiner lokalen Umgebung und bei der Bereitstellung in 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 

Wenn ich rake assets:precompile lokal ausführen, werden beide Nachrichten gedruckt.

Wenn ich zu Heroku schiebe, wird nur die Nachricht nondigest gedruckt. Jedoch, according to the buildpack, führt der Push genau denselben Befehl aus wie ich lokal bin.

Warum ist die Verbesserung der Basis-Assets: Precompile Fall funktioniert nicht auf Heroku, sondern funktioniert lokal?

Antwort

6

Ich habe in dieser Frage suchen und ich fand heraus, dass das Verhalten des assets:precompile je nachdem, ob RAILS_ENV und RAILS_GROUPS sind beide gesetzt oder nicht, schauen Sie sich das lokal an.

# 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 
    → 

Das Problem kommt von https://github.com/rails/rails/blob/3-2-stable/actionpack/lib/sprockets/assets.rake in invoke_or_reboot_rake_task Methode, wenn Sie die Rake::Task[task].invoke Linie mit ersetzen ruby_rake_task task dann funktioniert es wie man erwarten würde, es zu. Ich habe genau darüber nachgedacht, warum das so ist und habe den Grund nicht gefunden.

Da beide Variablen im Heroku-Build-Pack festgelegt sind, können Sie ein benutzerdefiniertes Build-Pack erstellen, ohne die GROUP- und ENV-Einstellungen festzulegen, obwohl dies meiner Meinung nach übertrieben ist. In diesem Szenario sollten Sie in der Lage sein, assets:precompile:primary oder assets:precompile:all zu verbessern und ein Ergebnis zu erzielen, das Ihrer gewünschten Absicht ähnelt.

+1

Ich erweiterte Assets: Precompile: Nondigest und das scheint für mich zu arbeiten – Josh

2

Sie setzen RAILS_ENV=production und RAILS_GROUPS=assets?

Auch nach this post, hat Heroku keine benutzerdefinierten Asset-Kompilation Aufgaben unterstützen ...

+0

Werde ich es wo einstellen? –