我已经在命令行(在Windows上(测试了YUI压缩器,它似乎工作得很好。
但是 assetic 创建的.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 %}
我有同样的问题...(问题似乎只存在于窗口上(我发现的唯一方法真的很脏:
1 - 在配置文件中指定 java 可执行路径(在 yui jar 声明路径的同一位置(
yui_css:
jar: "%kernel.root_dir%''Resources''java''yuicompressor.jar"
java: "C:''Program Files''Java''jre6''bin''java.exe"
2 - 打开资产''实用''进程.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);
而且它有效...但这不是一个真正的解决方案...
如果有人有更多信息...谢谢:)
使用的是最新的稳定版本(1.0.2(,那么它有一个错误,阻止它在Windows上正确使用YUI压缩器。正如@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但代码尚未标记。
希望这有帮助。
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
我刚刚遇到了同样的问题。
我做了什么来解决:
- 打开"deps"文件。
- 删除"[资产捆绑包]"部分中的"version=v1.0.0RC1"行。
- 运行"bin/vendor update"命令以获取最新版本的AsseticBundle。
希望这有帮助。
不确定您是否解决了这个问题,但我今天遇到了同样的问题。
我遵循了上面的建议,但仍然没有快乐。
所以我调查了 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(( 使用的临时目录的权限是错误的。
一旦我解决了这些权限,它就可以正常工作。
我不确定这是否与您收到的错误相同,但如果是这样,希望这会有所帮助。
干杯
亚当
感谢Jan Molak上面的帖子,我能够在Windows Vista上的Symfony 2中成功运行Assetic Less Filter。
在我的 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
我希望此更新不会导致其他问题。目前,一切似乎都按预期工作。
在花费了数小时处理此错误后,我解决了它,同时禁用了 dev 上的yui_css:
取代:
filter='yui_css'
由:
filter='?yui_css'
http://symfony.com/doc/current/cookbook/assetic/yuicompressor.html(在调试模式下禁用缩小(