Assetic + YUI Compressor в Symfony 2: это ошибка? - PullRequest
10 голосов
/ 02 июля 2011

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

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

Ответы [ 7 ]

5 голосов
/ 05 ноября 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 оценивается как 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, но код еще не был помечен.

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

5 голосов
/ 28 октября 2011

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

1 - укажите путь к исполняемому файлу Java в файле конфигурации (в то же времяместо пути объявления файла jui)

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

И это работает ... но это не настоящее решение ...

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

4 голосов
/ 02 июля 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 
3 голосов
/ 04 августа 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 (), был неверным.

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

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

Приветствия

Адам

3 голосов
/ 15 июля 2011

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

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

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

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

2 голосов
/ 13 мая 2012

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

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

0 голосов
/ 02 мая 2014

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

Заменив:

filter='yui_css'

на:

filter='?yui_css'

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

...