Windows上的symfony2 assetics yui压缩器(路径语法)

时间:2011-11-19 15:45:05

标签: windows symfony yui-compressor assetic

我正在尝试使用yui压缩器运行资产,如果这是运行的话,那就是sass。现在,两者都不起作用。从config.yml和twig模板中删除所有过滤器时,它可以工作,php app/console assetic:dump会复制css和js文件。

现在我想添加yui压缩器,我的config.yml看起来像这样:

assetic:
  debug: %kernel.debug%
  use_controller: false
  filters:
    yui_js:
      jar: %kernel.root_dir%/Resources/java/yuicompressor-2.4.6.jar

将过滤器添加到模板并再次运行assetic:dump会在以下错误中结束(由我翻译消息):

[RuntimeException]
The syntax for filename, directory name or drive name is wrong

我发现an article告诉我指定java.exe的路径,所以我将其添加到config.yml:

assetic:
  ..
  java: C:/Program Files (x86)/Java/jre6/bin/java.exe
  ..

现在资产:转储告诉我:

[RuntimeException]
The COMMAND "C:/Program" is either written wrong or

我尝试在配置中使用两个变量(使用\或\而不是/,添加单引号或双引号,使用短别名Progra~1或Progra~2),但我没有得到任何结果。这两个错误一直在增加。也许有人可以指出我正确的方向。

3 个答案:

答案 0 :(得分:6)

好的,我明白了。伙计,这个是残酷的。

让我们从简单的东西开始吧。 config.yml的工作版本可能如下所示:

assetic:
  debug: false
  use_controller: false
  java: C:\Program Files (x86)\Java\jre6\bin\java.exe
  sass: C:\Program Files (x86)\Ruby192\bin\sass.bat
  filters:
    scss: ~
    yui_js:
      jar: %kernel.root_dir%\Resources\java\yuicompressor-2.4.6.jar

出于某种原因,assetic总是导入scss的整个目录,所以我必须创建一个combine.scss,它以正确的顺序导入其他scss文件。

现在它变得丑陋,因为必须改变资产核心才能实现这一目标。资产的开发人员知道这个错误,我认为它已经在一些开发中继/分支中修复,但不是稳定的。

必须在第95行更改 Assetic \ Util \ ProcessBuilder

if (defined('PHP_WINDOWS_VERSION_MAJOR')) {

,第103行

$script .= ' '.implode(' ', array_map('escapeshellarg', $args));

和第110行

return new Process($script, $this->cwd, null, $this->stdin, $this->timeout, $options);

我希望很快就会修复这个错误,直到那时任何试图让它工作的人都会发现这个问题......让我感受到8小时的调试,阅读和尝试不同的方法。

答案 1 :(得分:0)

Boo 11月19日22:53的答案通过改变他在Assetic \ Util \ ProcessBuilder中提到的一切来为我工作(我忽略了第95行,因为它看起来和我的文件一样)

现在它适用于Windows。谢谢!

只是为了确认。我使用Symfony 2.0.7和yuicompressor-2.4.7

答案 2 :(得分:0)

对于使用window server 2008 r2的其他用户:

  1. 也许你应该为IIS用户/或机器的普通用户将C:\ windows \ Temp文件夹属性更改为777(读/写)

  2. 请从rubyinstaller.org解压缩ruby.7z,然后转到C:\ _ ruby​​193 \ bin,在这个解包位置你应该执行CMD提示符,输入:

    ruby -S gem install sass
    

    这样您就可以获得该职位的sass.bat

  3. 是时候使用Boo的最佳答案了,请注意在symfony2 dev env中可能没有必要将use_controller更改为false(在config.yml中),因为在config_dev.yml中有另一个use_controller routing_dev.yml(设置为true),在_assetic中还有一个{{1}}路由器,它们可能是关联的。