Assetic + YUI Compressor в Symfony 2: это ошибка?

Я протестировал компрессор YUI в командной строке (в Windows), и, похоже, он работает нормально.

Но .css, созданный с помощью assets, не сжимается и содержит это сообщение вверху (внутри .css!):

/*
[exception] 500 | Internal Server Error | RuntimeException
[message] 
[1] RuntimeException: 
            at n/a
                in E:\websites\symfony2\public_html\Symfony\vendor\assetic\src\Assetic\Filter\Yui\BaseCompressorFilter.php line 81

            at Assetic\Filter\Yui\BaseCompressorFilter->compress('

Это проблема конфигурации? Или ошибка в активе?

Вот код, который я использовал в своем шаблоне ветки:

{% stylesheets '@CompanyBundlenameBundle/Resources/public/css/style.css' filter='yui_css' %}
<link rel="stylesheet" type="text/css" media="screen" href="{{ asset_url }}" />
{% endstylesheets %}

person HappyDeveloper    schedule 01.07.2011    source источник
comment
У меня точно такая же проблема, но на Mac OS X Lion.   -  person David Morales    schedule 14.12.2011
comment
Похоже, YUI выдает эту ошибку. Можете ли вы запустить компрессор через style.css вне Assetic?   -  person Kris Wallsmith    schedule 12.06.2012


Ответы (7)


У меня та же проблема... (проблема, похоже, присутствует только в Windows) Единственный способ, который я нашел, действительно грязный:

1 - Укажите путь к исполняемому файлу java в файле конфигурации (в том же месте, что и путь объявления yui jar)

yui_css:
    jar: "%kernel.root_dir%\\Resources\\java\\yuicompressor.jar"
    java: "C:\\Program Files\\Java\\jre6\\bin\\java.exe"

2 - Откройте файл Assetic\Util\Process.php. Измените строку "proc_open" (строка 123 в моей версии) в методе "run" Исходная строка:

$process = proc_open($this->commandline, $descriptors, $pipes, $this->cwd, $this->env, $this->options);

Модифицированная строка:

$process = proc_open('"'.$this->commandline.'"', $descriptors, $pipes, $this->cwd, $this->env, $this->options);

И это работает... но это не реальное решение...

Если у кого-то есть больше информации... спасибо :)

person Pierre    schedule 28.10.2011

Если вы используете последнюю стабильную версию (1.0.2), то в ней есть ошибка, которая не позволяет корректно использовать компрессор YUI в Windows. Как указал @Pierre, проблема заключается в том, как вызывается функция proc_open, но исправление следует применять в другом месте.

Если вы посмотрите на класс Assetic\Util\ProcessBuilder, вы найдете виновника в строке 95:

#95 if (defined('PHP_WINDOWS_MAJOR_VERSION')) {

В PHP нет такой константы, как PHP_WINDOWS_MAJOR_VERSION ( http://php.net/manual/en/info.constants.php ), что делает проверку оператора if ложной. Вместо этого следует использовать PHP_WINDOWS_VERSION_MAJOR.

Вторая проблема, которую я нашел в этом классе, находится на пару строк ниже:

#102 if ($args) {
#103   $script .= ' '.implode(' ', array_map('escapeshellarg', $parts));
#104 }

$parts не определено в этой области и должно быть заменено на $args.

Как я узнал позже, обе проблемы были исправлены 16.09 в этом коммите: https://github.com/kriswallsmith/assetic/commit/cc2e9adb744df0704a5357adc1cf9287c427420f, но код еще не помечен.

Надеюсь это поможет.

person Jan Molak    schedule 05.11.2011

Компрессор YUI должен быть определен в вашем app/config/config.yml следующим образом:

assetic:
    debug:          %kernel.debug%
    use_controller: false
    filters:
        cssrewrite: ~
        yui_css:
            jar: %kernel.root_dir%/Resources/java/yuicompressor-2.4.6.jar

Конечно, вам нужно скачать компрессор YUI и скопировать его в каталог /app/Resources/java/.

Предупреждение, пакет активов не публикует сжатый CSS автоматически, вам нужно опубликовать их вручную с помощью следующей команды:

php app/console assetic:dump 
person egeloen    schedule 02.07.2011
comment
На dev он публикует их автоматически. Во всяком случае, я попробовал команду дампа, и появилась та же ошибка: RuntimeException. Это расстраивает, похоже, они тестируют код только на Linux. - person HappyDeveloper; 02.07.2011
comment
Я работаю на Linux и не могу воспроизвести вашу ошибку в своей системе. Протестируйте проблему symfony github, команда очень реагирует. - person egeloen; 04.07.2011

У меня такая же проблема.

Что я сделал, чтобы решить:

  • Откройте файл «deps».
  • Удалите строку «version=v1.0.0RC1» в разделе «[AsseticBundle]».
  • Запустите команду «bin/vendors update», чтобы получить последнюю версию AsseticBundle.

Надеюсь это поможет.

person fernanDOTdo    schedule 15.07.2011

Не уверен, что вы решили это, но у меня была такая же проблема сегодня.

Я следовал приведенным выше предложениям, но все равно не радовался.

Итак, я изучил внутреннюю ошибку 500, и я получил следующую ошибку:

[message] Warning: file_put_contents(): Filename cannot be empty in /Applications/MAMP/htdocs/shop/vendor/assetic/src/Assetic/Filter/Yui/BaseCompressorFilter.php line 84

Я просмотрел файл в строке 84, и в этой строке было:

$input = tempnam(sys_get_temp_dir(), 'assetic_yui_compressor');

После некоторого поиска и отладки я обнаружил, что разрешения на мой временный каталог, используемые sys_get_temp_dir(), были неправильными.

Как только я разрешил эти разрешения, все заработало нормально.

Я не уверен, была ли это та же самая ошибка, которую вы получили, но если да, надеюсь, это поможет.

Ваше здоровье

Адам

person Adam Stacey    schedule 04.08.2011

Благодаря сообщению Яна Молака выше я смог успешно запустить Assetic Less Filter в Symfony 2 на Windows Vista.

В моем файле deps я изменил

[assetic]
    git=http://github.com/kriswallsmith/assetic.git
    version=v1.0.3

в

[assetic]
    git=http://github.com/kriswallsmith/assetic.git
    version=cc2e9adb744df0704a5357adc1cf9287c427420f

а затем запустить

php bin\vendors update

Я надеюсь, что это обновление не вызовет других проблем. На данный момент все работает так, как ожидалось.

person qdb    schedule 13.05.2012

Потратив несколько часов на эту ошибку, я решил ее, отключив yui_css на dev с помощью:

Заменять :

filter='yui_css'

by :

filter='?yui_css'

http://symfony.com/doc/current/cookbook/assetic/yuicompressor.html (отключить минификацию в режиме отладки)

person Romuald    schedule 02.05.2014