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

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

Но .css, созданный assetic, не сжимается и поставляется с этим сообщением сверху (внутри .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 %}

Ответ 1

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

1 - Укажите исполняемый путь java в файле конфигурации (в том же месте пути объявления jui 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 моей версии) в методе "запустить" Исходная строка:

$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);

И он работает... но не является реальным решением...

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

Ответ 2

Если вы используете последнюю стабильную версию (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 равным false. Вместо этого следует использовать 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 но код еще не отмечен.

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

Ответ 3

В вашем app/config/config.yml необходимо определить компрессор YUI:

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/.

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

php app/console assetic:dump 

Ответ 4

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

Что я сделал для решения:

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

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

Ответ 5

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

Я следил за приведенными выше предложениями, но до сих пор не радуюсь.

Итак, я просмотрел 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');

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

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

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

Приветствия

Адам

Ответ 6

Благодаря сообщению Jan Molak выше, я смог успешно запустить 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

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

Ответ 7

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

Заменить:

filter='yui_css'

:

filter='?yui_css'

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