2012-07-10 16 views
12

Ich benutze Assetic mit dem Kompassfilter, um .scss-Dateien zu übertragen und zu kompilieren. Dieser Teil des Setups scheint gut zu funktionieren. Ich war jedoch der Ansicht, dass Symfony 2 in der Umgebung app_dev alle Assets (einschließlich CSS) für jede Seitenladung neu kompilieren und nicht das Caching-System verwenden würde, das für die Produktumgebung verwendet wird.Statische Assets, die nicht mit symfony2 aufräumen Cache-Befehl löschen

Dies scheint nicht zu geschehen.

Wenn ich eine Änderung an einem .scss machen Datei wird nur wirksam, wenn ich benutze:

app/console cache:clear 

Ich dachte, der ganze Sinn der Entwickler-Umgebung war zu vermeiden, diese jedes Mal tun ?!

Ich habe die Berechtigungen der Cache-Ordner überprüft (um sicher zu sein, habe ich sie eingestellt, damit jeder lesen und schreiben kann). Hat jemand irgendwelche Vorschläge?

+0

Ich benutze Symfony mit ** weniger ** und es kompiliert es bei jeder Anfrage, solange Änderungen in der tatsächlich enthaltenen Datei und nicht in Dateien aus dieser importiert werden. Vielleicht ist das dein Problem? – solarc

Antwort

10

Ich denke, ich die Antwort hier gefunden habe: Es scheint,

assetic compass filter, css not updating when changing imported file (google groups discussion)

, dass, wenn eine Änderung an einer importierten Datei ohne Änderungen an der übergeordneten Datei die Eltern dann gemacht wird Datei wird nicht neu kompiliert. Das Ergebnis der Änderung wird erst angezeigt, wenn Sie die Neukompilierung erzwingen.

Das Plakat auf Google-Gruppen vorgeschlagen, eine mögliche Lösung (hack!) Durch Bearbeiten des AsseticController. Ich habe es noch nicht ausprobiert, aber selbst wenn es funktioniert, würde ich lieber kein Herstellerpaket bearbeiten.

3

Asset-Kompilierung ist nicht Teil des Caching-Systems. Sie müssen Assets erneut installieren, wenn Sie Änderungen vornehmen, unabhängig von der Umgebung.

app/console assets:install web 

Wenn das Dateisystem Sie auf symbolische Links unterstützt sind, können Sie vermeiden, für jede Änderung, diesen Befehl auszuführen haben und stattdessen installieren Sie einfach die Vermögenswerte als solche

app/console assets:install web --symlink 

Aber da Sie verwenden Sass, das ist wahrscheinlich keine Option für dich.

HTH

+0

Tut mir leid Peter, ich hätte klarer sein sollen. Ich spreche nur über Asset-Dateien (CSS, JS) nicht Vermögenswerte wie Bilder. In den Dokumenten (http://symfony.com/doc/current/cookbook/assetic/asset_management.html) heißt es, dass diese Objekte in der Entwicklungsumgebung dynamisch gehandhabt werden und Änderungen sofort sichtbar sein sollten. – musoNic80

3

Ich weiß, dass dies ein altes Thema ist, aber die einzigen Antworten, die ich in Ordnung bringen konnte, waren der CompassElephantBundle und der obige AsseticController-Hack. Ich habe eine Vorgehensweise, die im Wesentlichen bedeutet, dass ich das Anbieterpaket nicht bearbeiten musste.

Die Art, wie ich es getan habe, ist zu bearbeiten Kopieren Sie den ursprünglichen AsseticController und verknüpfen Sie dann zu dem in der Konfiguration von den Parametern.

parameters: 
    assetic.controller.class: Acme\RandomBundle\Controller\AsseticController 

Die kopierte AsseticController tut nur preg_match für den Dateityp aus dem Quellpfad und korrigiert Caching von dort.

13

Wenn Sie mit Symfony 2 Assets in Dev arbeiten. Umgebung, einfach verwenden this command:

php app/console assets:install 
php app/console assetic:dump --watch 

Seit Version 2.4 --watch is deprecated und wird ersetzt durch:

php app/console assetic:watch 
+0

Details: http://symfony.com/blog/new-in-symfony-2-6-smarter-assets-install-command und http://symfony.com/doc/current/cookbook/assetic/asset_management.html – Dung

2

ich dieses Problem in der lokalen Entwicklung durch Hinzufügen einer Zeile bis zum Ende meines parameters.yml, die im Grunde stoppt jedes Asset-Caching nicht daran fixiert haben.

# parameters.yml 
... 

assetic.cache.class: Assetic\Cache\ArrayCache 

Dies sollte nie in einer Produktionsumgebung enthalten sein, wie wir das Caching passieren soll!

0

Ich verwende einen anderen Weg. Ich füge alle .scss-Dateien während der Entwicklung hinzu

und nachdem ich die Entwicklung abgeschlossen habe, entferne ich sie. Auf diese Weise muss ich meinen Cache nicht löschen und Einstellungen hinzufügen/ändern. Es funktioniert immer für mich.

Verwandte Themen