2013-07-30 11 views
5

Für meine prod Umgebung Ich möchte konfiguriert, um den UglifyCSS Filter wie folgt verwenden (config_prod.yml):Assetic Dump nicht findet uglifycss in meinem Symfony App

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

Aber immer, wenn ich laufen

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

ich erhalte diese Fehlermeldung:

[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) 

So offensichtlich ist Assetic für uglifycss insuchenobwohl ich es für einen anderen Pfad konfiguriert, /usr/local/bin. Weiß jemand, was hier vor sich geht?

+0

Haben Sie jemals dieses Problem lösen? Ich habe das gleiche Problem. Ich kann es beheben, indem ich die ausführbare Datei mit/usr/bin/uglifyjs verlinke, aber ich wollte etwas Lokales in meinem app/Resources-Verzeichnis, damit ich es mit Versionskontrolle bereitstellen kann. – Fodagus

+0

Nein, ich habe noch keine Lösung gefunden. Obwohl ich zugeben muss, dass ich es in den letzten Wochen nicht versucht habe. Vielleicht ist es ein Assetic Bug, der behoben wurde. – acme

+0

Das nervt mich, also bin ich Debuggen/Tauchen die Quelle. Bisher habe ich das in der app/cache/Prod/appProdProjectContainer.php gefunden: $ this-> services ['assetic.filter.uglifyjs2'] = $ instance = neu \ Assetic \ Filter \ UglifyJs2Filter ('/ usr/bin/uglifyjs ','/usr/bin/node '); Der Filter wird NICHT die Werte übergeben, die wir in der .yml-Datei festgelegt haben. Wenn der Dienst generiert wird, findet er die Schlüssel nicht. Sieht immer noch aus ... – Fodagus

Antwort

1

Wenn Sie die binäre von uglifycss installiert haben, gibt es keine Notwendigkeit für den Pfad zum Knoten angeben.

Ich bin mir ziemlich sicher, dass

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

den Trick tun sollten.

+1

Ich habe das schon einmal ausprobiert, es funktioniert auch nicht. Der Pfad wird einfach ignoriert. Es ist so, als würde es diese Konfigurationsdatei überhaupt nicht verwenden, obwohl ich alles doppelt und tribbelüberprüft habe. – acme

7

Meine abschließende Konfiguration, die zur Arbeit erscheint, ist so:

  1. config_prod einrichten

    app/config/config_prod.yml 
    assetic: 
        filters: 
         uglifycss: 
         bin: %kernel.root_dir%/Resources/node_modules/.bin/uglifyjs 
         node: null 
         apply_to: '*.css$' 
    
  2. Dont alles in config.yml über uglify setzen. Blätter diese in der config_ (env) .yml Dateien

  3. Rebuild der Cache

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

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

, wie ich das herausgefunden:

Ich hatte dieses Problem und schaffte es, fi x es. Ich denke, dass mein Setup jemals gewesen sein könnte so etwas anders, in ich meine uglify Konfiguration verteilt auf app/config.yml und App hatte/config_prod.yml

Meine Konfiguration war identisch mit: 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$" 

Was ich fand, war, dass Symfony meine Variablen in config.yml ignorierte, als es den Cache baute. Sie können sehen, was es findet, indem Sie in app/cache/prod/appProdProjectContainer.php suchen und nach 'ugififycss' suchen. Mine sah wie folgt aus:

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

Wenn ich meine bin bewegt: Variable config_prod.yml und den Cache „cache: clear“ wieder aufzubauen, fand es die Einstellung und zog sie in wurde jedoch Knoten immer noch als übergeben wird. '/ usr/bin/Knoten'. Wenn Sie die Quelle für den Uglify-Filter betrachten, wird JUST den Uglify-Pfad verwenden, wenn die Knotenvariable null ist. Um die Binärdatei von uglifycss zu verwenden, setzen Sie einfach node auf null.

+0

Hinweis: Sie können die Konfiguration in beiden Dateien haben, es ist nur so, dass Symfony die Konfiguration nicht zusammenführt und die umgebungsspezifische Konfiguration Ihre vorherige Konfiguration überschreibt. – phoops

1

machen Sie einfach einen Symlink =)

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

Nicht so schmutzig und funktioniert 100% =)

Verwandte Themen