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 (отключить мини-режим в режиме отладки)