【问题标题】:symfony2 assetics yui compressor on windows (path syntax)Windows 上的 symfony2 assetsics yui 压缩器(路径语法)
【发布时间】:2012-01-01 23:11:29
【问题描述】:

我正在尝试让资产与 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
  ..

现在assetic:dump 告诉我:

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

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

【问题讨论】:

  • 你试过用双引号,单引号,用\ 替换空格吗?
  • 对不起,不是指括号,而是引号,所以是的,尝试了它们的组合。还尝试编写 Program\ Files\ (x86) 和其他一些东西。如果有人能指导我在哪里找到将assetic集成到symfony2中的地方,我自己可能会弄清楚,但我根本找不到它(定义命令的位置,读取配置的位置等)。
  • 如果 Program\ Files\ 输出 非常 相同的信息,那么请尝试 Program\\ Files\\
  • 不会改变任何东西。唯一似乎有所改变的是使用 C:\Progra~2\Java\jre6\bin\java.exe 但随后我再次收到第一条消息。
  • 哇,我想我终于得到了一些东西:我找到了link,然后将第 95 行更改为if (defined('PHP_WINDOWS_VERSION_MAJOR')) {,现在我在创建输出文件时遇到错误。我会看看我能走多远。

标签: windows symfony yui-compressor assetic


【解决方案1】:

好的,我想通了。伙计,这个太残忍了。

让我们从简单的东西开始。 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 文件。

现在它变得丑陋了,因为必须更改资产核心才能使其正常工作。 Assetic 的开发人员知道这个错误,我认为它已在某些开发主干/分支中修复,但不是稳定的。

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

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 个小时的时间来调试、阅读和尝试不同的方法。

【讨论】:

  • Symfony2 的当前版本(2.0.5 版)具有 Assetic 1.0.2 版,在 Windows 上已损坏。当前大师解决了您提到的问题。检查 this 提交以获取具有修复的版本。另请注意,如果您尝试使其在 Windows 上运行,compass 现在在当前的 Assetic 大师中已损坏。这个issue 和这个onecompass 讨论这个问题。
  • 这个错误仍然存​​在于 symfony 2.0.9 中,它与assetic 1.0.2 捆绑在一起
  • 这个问题解决了吗?我遇到了同样的问题,但仅限于 SASS?
【解决方案2】:

Boo 11 月 19 日 22:53 的回答确实对我有用,因为他更改了他在 Assetic\Util\ProcessBuilder 中提到的所有内容(我忽略了第 95 行,因为它看起来与我的文件中的相同)

现在它可以在 Windows 上运行。谢谢!

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

【讨论】:

    【解决方案3】:

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

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

    2. 请从 ruby​​installer.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_dev.yml 中还有另一个 use_controller(设置为 true) ,并且在 routing_dev.yml 中还有一个 _assetic 路由器,它们可能是关联的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-22
      • 1970-01-01
      • 2011-03-29
      • 1970-01-01
      • 1970-01-01
      • 2011-12-31
      • 1970-01-01
      相关资源
      最近更新 更多