symfony2资产yui压缩机在Windows(path语法)

我试图用yui压缩机运行资产,如果运行,sass。 现在,两者都不起作用。 当从config.yml和树枝模板中删除所有的filter,它的工作原理和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 

我发现一篇文章告诉我指定java.exe的path,所以我把它添加到config.yml:

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

现在资产:转储告诉我:

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

我尝试在configuration中使用两个variables(使用\或\),而不是/,添加单引号或双引号,使用短别名Progra〜1或Progra〜2),但我没有得到任何地方。 这两个错误一直在上升。 也许有人可以把我指向正确的方向。

Solutions Collecting From Web of "symfony2资产yui压缩机在Windows(path语法)"

好的,我明白了。 男人,这个是残酷的。

让我们从容易的东西开始。 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 

出于某种原因,资产总是为scss导入一个完整的目录,所以我必须制作一个combine.scss,以正确的顺序导入其他scss文件。

而现在变得越来越难看,因为要改变这个问题,必须改变资产的核心。 资产的开发者知道这个bug,我认为这是固定在一些开发干线/分支,但不是稳定的。

必须在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个小时的调试,阅读和尝试不同的方法。

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

现在它在Windows上工作。 谢谢!

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

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

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

  2. 请从rubyinstaller.org解压ruby.7z,并进入C:\ _ruby193 \ bin,在这个解压位置你应该执行CMD提示符,输入:

     ruby -S gem install sass 

    所以你会在那个位置得到这个sass.bat

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