2013-07-30 17 views
5

Na moim środowisku produkcyjnym chcę użyć filtru UglifyCSS skonfigurowany w następujący sposób (config_prod.yml):Assetic wysypisko nie znajdzie uglifycss w mojej aplikacji Symfony

assetic: 
    filters: 
     uglifycss: 
      node: /usr/bin/env node 
      bin: /usr/local/bin/uglifycss 
      apply_to: "\.css$" 

Ale kiedy biegnę

php app/console assetic:dump --env=prod --no-debug 

otrzymuję komunikat o błędzie:

[Assetic\Exception\FilterException]                              
    An error occurred while running:                               
    '/usr/local/bin/node' '/usr/bin/uglifycss' '/tmp/inputtyeA2H'                        

    Error Output:                                    

    node.js:201                                    
      throw e; // process.nextTick error, or 'error' event on first tick                    
       ^                                   
    Error: Cannot find module '/usr/bin/uglifycss'                           
     at Function._resolveFilename (module.js:332:11)                          
     at Function._load (module.js:279:25)                             
     at Array.0 (module.js:479:10)                               
     at EventEmitter._tickCallback (node.js:192:40) 

Tak oczywiście Assetic szuka uglifycss w /usr/bin chociaż skonfigurowałem go do używania innej ścieżki, /usr/local/bin. Czy ktoś wie, co się tutaj dzieje?

+0

Czy kiedykolwiek rozwiązać ten problem? Mam ten sam problem. Mogę to naprawić, dowiązując symbolicznie plik wykonywalny do/usr/bin/uglifyjs, ale chciałem czegoś lokalnego w moim katalogu app/Resources, aby móc wdrożyć go z kontrolą wersji. – Fodagus

+0

Nie, na razie nie znalazłem rozwiązania. Chociaż muszę przyznać, że nie próbowałem tego w ostatnich tygodniach. Może naprawiono błąd Assetic. – acme

+0

To mnie denerwuje, więc debuguję/nurkuję źródło. Do tej pory znalazłem to w app/cache/Prod/appProdProjectContainer.php: $ this-> services ['assetic.filter.uglifyjs2'] = $ instance = new \ Assetic \ Filter \ UglifyJs2Filter ('/ usr/bin/uglifyjs ','/usr/bin/node '); Filtr NIE jest przekazywany wartości ustawionych w pliku .yml, więc podczas generowania usługi nie znajduje kluczy. Wciąż wyglądasz ... – Fodagus

Odpowiedz

1

Jeśli zainstalowałeś plik binarny uglifycss, nie ma potrzeby określania ścieżki do węzła.

jestem całkiem pewny

assetic: 
    filters: 
     uglifycss: 
      bin: /usr/local/bin/uglifycss 
      apply_to: "\.css$" 

powinno załatwić sprawę.

+1

Próbowałem już tego wcześniej, to też nie działa. Ścieżka jest po prostu ignorowana. To tak, jakby w ogóle nie korzystał z tego pliku konfiguracyjnego, ale sprawdziłem wszystko w trybie podwójnego i zespolonego. – acme

7

Moja konfiguracja końcowa który wydaje się działać jest takie:

  1. Konfigurowanie config_prod

    app/config/config_prod.yml 
    assetic: 
        filters: 
         uglifycss: 
         bin: %kernel.root_dir%/Resources/node_modules/.bin/uglifyjs 
         node: null 
         apply_to: '*.css$' 
    
  2. Dont umieścić coś w config.yml o zeszpecić. Pozostawia je w config_ (env) pliki .yml

  3. odbudować cache

    app/console cache:clear --env=prod --no-debug 
    
  4. Dump Aktywa

    app/console assetic:dump --env=prod --no-debug 
    

Jak wyobraziłem to uwagę:

Miałem ten problem i udało mi się fi x to. Myślę, że moja konfiguracja mogła być kiedykolwiek tak nieco inaczej, w miałem zeszpecić konfiguracji podzielone między app/config.yml i app/config_prod.yml

Moja konfiguracja była identyczna: http://symfony.com/doc/current/cookbook/assetic/uglifyjs.html :

app/config/config.yml 
assetic: 
filters: 
    uglifycss: 
     bin: %kernel.root_dir%/Resources/node_modules/.bin/uglifyjs 

app/config/config_prod.yml 
assetic: 
filters: 
    uglifycss: 
     apply_to: "*.css$" 

Co znalazłem, Symfony ignorowała moje zmienne w config.yml podczas budowania pamięci podręcznej. Możesz zobaczyć, co znajduje się przez wyszukiwanie w app/cache/prod/appProdProjectContainer.php i wyszukiwanie 'uglifycss'. Kopalnia wyglądał następująco:

protected function getAssetic_Filter_UglifycssService() 
{ 
    $this->services['assetic.filter.uglifycss'] = $instance = new \Assetic\Filter\UglifyCssFilter('/usr/bin/uglifycss', '/usr/bin/node'); 

Kiedy przeniósł mój BIN: zmienną config_prod.yml i odbudować cache „cache: clear”, to okazało się, że ustawienie i pociągnął go jednak węzeł był nadal przekazywane jako. "/ usr/bin/node". Patrząc na źródło dla Filtra Uglify, użyje TYLKO ścieżki uglify, jeśli zmienna węzła ma wartość NULL. Tak więc, aby użyć binarnego uglifycss, wystarczy ustawić węzeł na wartość null.

+0

Uwaga: możesz mieć konfigurację w obu plikach, po prostu Symfony nie scali konfiguracji, a konfiguracja specyficzna dla środowiska spowoduje nadpisanie poprzedniej konfiguracji. – phoops

1

Wystarczy dokonać dowiązania =)

ln -s /usr/local/bin/uglifycss /usr/bin/uglifycss 

Nie tak brudne i działa w 100% =)

Powiązane problemy