2013-07-30 4 views
5

Для моей прод среды я хочу использовать UglifyCSS фильтр настроен следующим образом (config_prod.yml):Assetic свалка не находит uglifycss в моем приложении Symfony

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

Но всякий раз, когда я бегу

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

я получаю сообщение об ошибке:

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

Так, очевидно, Assetic ищет uglifycss в /usr/bin, хотя я настроил его на использование другого пути, /usr/local/bin. Кто-нибудь знает, что здесь происходит?

+0

ли вы когда-нибудь решить эту проблему? У меня такая же проблема. Я могу исправить это, связав исполняемый файл с/usr/bin/uglifyjs, но я хотел что-то локальное в своем каталоге приложений/ресурсов, чтобы я мог развернуть его с контролем версий. – Fodagus

+0

Нет, пока не найдено решения. Хотя я должен признать, что я не пробовал это в последние недели. Возможно, это исправленная Assetic ошибка. – acme

+0

Это раздражает меня, поэтому я отлаживаю/дайвинг источника. До сих пор я нашел это в app/cache/Prod/appProdProjectContainer.php: $ this-> services ['assetic.filter.uglifyjs2'] = $ instance = new \ Assetic \ Filter \ UglifyJs2Filter ('/ usr/bin/uglifyjs ','/usr/bin/node '); Фильтр НЕ передает значения, установленные в файле .yml, поэтому при создании службы он не находит ключи. Еще глядя ... – Fodagus

ответ

1

Если вы установили двоичный файл uglifycss, нет необходимости указывать путь к узлу.

Я уверен, что

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

должен сделать трюк.

+1

Я уже пробовал это раньше, он тоже не работает. Путь просто игнорируется. Это похоже на то, что он вообще не использует этот конфигурационный файл, хотя я дважды и триббером проверял все. – acme

7

Мой Окончательная конфигурация, которая, как представляется, работа такая:

  1. Настройка 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 положить что-нибудь в config.yml о уродовать. Листья их в config_ (ENV) .yml файлы

  3. Перестроить кэш

    app/console cache:clear --env=prod --no-debug 
    
  4. Dump активы

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

Как я понял это:

У меня была эта проблема, и мне удалось х это. Я думаю, что моя установка может быть очень немного разные, в меня было уродовать раскол конфигурации через приложение/config.yml и приложение/config_prod.yml

Моя конфигурация была идентична: 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$" 

Что я нашел, Symfony игнорировал мои переменные в config.yml, когда он создавал кеш. Вы можете увидеть, что он находит, просматривая app/cache/prod/appProdProjectContainer.php и ищет «uglifycss». Шахта выглядела следующим образом:

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

Когда я переехал мой ящик: переменную config_prod.yml и перестраивать кэш «кэш: прозрачный», он нашел установку и вытащил его, однако, узел был по-прежнему передаются в качестве. '/ USR/бен/узел. Если посмотреть на источник фильтра Uglify, он будет использовать JUST путь uglify, если переменная узла равна нулю. Итак, чтобы использовать двоичный файл uglifycss, просто установите узел в null.

+0

Примечание: вы можете иметь конфигурацию в обоих файлах, просто Symfony не будет объединять конфигурацию, а конфигурация, специфичная для конкретной среды, перезапишет предыдущую конфигурацию. – phoops

1

Просто сделать символическую ссылку =)

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

Не так грязно и работает на 100% =)

 Смежные вопросы

  • Нет связанных вопросов^_^