symfony 2 中的 Assetic + YUI 压缩器:这是一个错误吗?


Assetic + YUI Compressor in symfony 2: is this a bug?

我已经在命令行(在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(在调试模式下禁用缩小(