10

我已经在命令行(在 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 %}
4

7 回答 7

5

如果您使用的是最新的稳定版本(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 语句测试评估为假。应该使用的是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 但尚未标记代码。

希望这可以帮助。

于 2011-11-05T16:54:51.470 回答
5

我有同样的问题......(这个问题似乎只出现在 Windows 上)我发现的唯一方法,真的很脏:

1 - 在配置文件中指定java可执行路径(在yui 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 文件 在“run”方法中更改“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);

它的作品......但不是一个真正的解决方案......

如果有人有更多信息......谢谢:)

于 2011-10-28T16:39:44.413 回答
4

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 
于 2011-07-02T15:59:07.270 回答
3

我刚遇到同样的问题。

我做了什么来解决:

  • 打开“deps”文件。
  • 删除“[AsseticBundle]”部分中的“version=v1.0.0RC1”行。
  • 运行“bin/vendors update”命令获取最新版本的 AsseticBundle。

希望这可以帮助。

于 2011-07-15T03:39:24.570 回答
3

不知道你是否解决了这个问题,但我今天遇到了同样的问题。

我遵循了上面的建议,但仍然没有快乐。

所以我查看了 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() 使用的临时目录的权限是错误的。

一旦我解决了这些权限,它就可以正常工作。

我不确定这是否与您收到的错误相同,但如果是这样,希望这会有所帮助。

干杯

亚当

于 2011-08-04T11:48:16.353 回答
2

感谢上面 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

我希望这次更新不会引起其他问题。现在一切似乎都按预期工作。

于 2012-05-13T16:32:45.390 回答
0

在这个 bug 上花费了几个小时后,我解决了这个问题,同时在 dev 上禁用了 yui_css:

代替 :

filter='yui_css'

经过 :

filter='?yui_css'

http://symfony.com/doc/current/cookbook/assetic/yuicompressor.html(在调试模式下禁用缩小)

于 2014-05-02T16:40:28.277 回答