如何让Assetic + sass在Windows中与Symfony2一起使用?

时间:2012-03-08 23:35:38

标签: windows symfony sass compass-sass assetic

我试图让Assetic在Symfony 2.0.11中运行,以便将sass用于css文件。

我已经在这个问题上摆弄了好几个小时,从我收集的内容来看,当前的资产版本(1.0.2)被搞砸了,而且无法在Windows中工作。

我尝试将资产和asseticBundle更新为github的最新Master版本,但是这些需要Symfony 2.1,这会带来很多变化并且不向后兼容(更不用说它也没有正式发布),所以这不是一个选择。

这篇文章symfony2 assetics yui compressor on windows (path syntax)对此事提供了一些很好的见解,但不幸的是,它推荐的资产库的变化不足以使其在我的环境中正常运行。

我在https://github.com/kriswallsmith/assetic/commit/5621cd449b0d85316e5872d672e7e900edc2246chttps://github.com/kriswallsmith/assetic/issues/25

中也找到了一些有趣的内容

最后,我知道我需要更改vendor / assetic / src / Assetic / Util / ProcessBuilder.php,可能是包中的其他一些文件,也许在我的config.yml文件中添加一些信息(似乎添加java或sass的路径可能有帮助。)

我需要的是那些能够获得有效工作配置的人,让我指出我失踪的东西,或理想情况下让那件该死的东西工作所需的步骤。

任何人都可以胜任这个任务吗?

_____更新: 还在挖掘,现在只有3天了:/

新元素:

1 / php5.3.8可能存在proc_open和数据>的问题。每{20}个字节https://bugs.php.net/bug.php?id=60120 从git存储库(https://github.com/symfony/symfony/issues/3216)获取symfony时,此问题可能会产生影响。 发出" git config --global core.autocrlf input"并且从git重新获取所有内容允许我使用php5.3.10而不会崩溃。

2 / https://github.com/kriswallsmith/assetic/commit/5621cd449b0d85316e5872d672e7e900edc2246c看起来像是一个不错的基础。 我在Process.php中对路径进行了一些小修改(参考https://github.com/kriswallsmith/assetic/issues/92),但我并不确定这是否相关。 无论如何,此时我从Assetic获得的命令行在shell中工作并输出预期的css。

3 / sass.bat(位于Ruby193 \ bin中)需要有一个绝对路径到ruby.exe以便更进一步(我学到了很难的方法,你只看到错误信息,如果你var_dump和kill脚本在正确的位置!)

现在,事情看起来好一点,但仍然没有使用sass(我认为它可以与其他一些过滤器一起使用) 我成功地将Process.php(第172行)中的问题隔离在" $ data = fread($ pipe,8192);" :脚本第二次在这个地方通过,$ pipe指向第二个资源,它永远不会返回...并且php卡住并且真的很难出现(我需要杀死/重启wamp至少两次到能够做另一个测试)

我真的不熟悉proc_open和stream,而且我很难理解代码在那里尝试做什么......

我希望这可以帮助下一个试图让事情有效的人,并最终帮助我的情况。 仍在寻找一些支持!

_____更新:

进一步测试让我意识到我可以拥有" php app / console assetic:dump"当sass文件足够小时工作。在我看来,实际的CSS规则(不包括变量定义和mixins)需要使用php5.3.10小于4096字节,甚至更少使用php 5.3.8。 这指向https://bugs.php.net/bug.php?id=60120https://bugs.php.net/bug.php?id=51800

中描述的proc_open错误

_____更新:

我尝试安装php5.4来检查它是否正在解决问题。 我花了一些时间才意识到这个版本在我的电脑上运行的原因是因为还没有x64版本。 然后我安装了32位版本的wamp,并让php5.4轻松使用它。 最终结果:proc_open仍然挂起:( 我在这里开始缺乏想法......


操作实例:

所以,最终我让这个工作起来了,并且我认为我会尝试为以后的观众总结最重要的步骤:

1。安装了Ruby 1.9.3和指南针0.12

检查http://rubyinstaller.org/downloads/

使用

将指南针更新为0.12
"gem update --system"

然后

"gem install compass"

2。在罗盘中更改compiler.rb

转到Ruby193 \ lib \ ruby​​ \ gems \ 1.9.1 \ gems \ compass-0.12.0 \ lib \ compass 在第10行,替换

self.from, self.to = File.expand_path(from), to

self.from, self.to = from.gsub('./', ''), to

/!\有一些设置,可能是相反的方式,但是我试图描述的设置,就是这样。

3。将Assetic指向与symfony 2.0.11

配合使用的最新版本

像这样编辑deps文件:

[assetic]
    git=http://github.com/kriswallsmith/assetic.git
    ;version=v1.0.2
    version=ac71449e46bed22c276da26bf54ab2f733b3801d
[AsseticBundle]
    git=http://github.com/symfony/AsseticBundle.git
    target=/bundles/Symfony/Bundle/AsseticBundle
    ;version=v1.0.1
    version=da4a46ce37557dcf3068b8493b12bdbbe47455e2

/!\你需要删除deps.lock文件中对特定版本的引用!

并发出" php bin / vendors install"。

4。更改config.yml

这就是我现在的样子:

# Assetic Configuration
assetic:
    debug:          %kernel.debug%
    use_controller: false
    # java: /usr/bin/java
    filters:
        compass:
            bin: e:\outils\Ruby193\bin\compass.bat

5。在compass.bat / sass.bat

中使用绝对路径

转到您的Ruby193 \ bin目录并编辑compass.bat以设置ruby.exe的绝对路径(在您使用sass.bat时也一样)

6。更改模板中的调用

这是我现在的样子:

{% stylesheets filter='compass' output='css/*.css'
        '@LndBimBundle/Resources/public/css/main.scss'
    %}
        <link href="{{ asset_url }}" type="text/css" rel="stylesheet" />
    {% endstylesheets %}

测试:

进行测试,您可以使用

php app/console assetic:dump --verbose --no-debug

这样,如果你像我一样进入无限循环,你可以只使用ctrl + C,这使得测试方式比在浏览器中更有效

/!\你绝对需要使用--no-debug,否则你的css中会出现一堆看似不需要的行:

@media -sass-debug-info{filename{font-family:file\:\/\/C\:\/Users\/Mattso\/AppData\/Local\/Temp\/ass9DBF\.tmp\.scss}line{font-family:\0000359}}

您可以使用

die($this->commandline);

的运行方法中的

vendor\assetic\src\Assetic\Util\Process.php

显示当前命令行,并对其进行测试。

我现在看起来像这样:

cmd /V:ON /E:ON /C ""e:\outils\Ruby193\bin\compass.bat" "compile" "C:\Users\Mattso\AppData\Local\Temp" "--config" "C:\Users\Mattso\AppData\Local\Temp\ass59BB.tmp" "--sass-dir" "" "--css-dir" "" "C:\Users\Mattso\AppData\Local\Temp\ass59BC.tmp.scss""

然后你只需输入&#34; php app / console assetic:dump --no-debug&#34;在你的cli中创建web \ css中的css文件并刷新你网站的页面。等等......瞧! (希望!)

注意:您可能已经注意到,我使用的是CompassFilter而不是SassFilter。那是因为它做同样的事情(甚至更多)并且实际上可以做到我们对它的期望。如果有人能找到如何修复SassFilter,那就会膨胀。与此同时,我已经花了太多时间在这上面。

我一直在疯狂地拉我的头发好几天,我希望这篇文章能对其他人的心理健康有所帮助;)

2 个答案:

答案 0 :(得分:3)

正如这个问题的更新(或任何人只使用sass而非指南针),如果有人来这里寻找答案。现在应该需要的只是:

assetic:
    filters:
        cssrewrite: ~
        sass: 
          bin: "<pathtosass>"
          apply_to: "\.scss$"

parameters:
     assetic.ruby.bin: '<pathtoyourrubyhere>'

这是使用PHP 5.4

答案 1 :(得分:2)

请参阅我在Windows下如何在Symfony2中使用SCSS过滤器的问题的答案?:https://stackoverflow.com/a/9658410/3765

这是一个非常全面的报道,我花了很多时间来尝试让Assetic在Windows上工作。


基于your example - 您不需要添加cssrewrite过滤器。以下是我如何使用Twig的Compass:

{% stylesheets filter='compass' output='css/compiled/*.css' 'css/example.scss' %}
    <link rel="stylesheet" href="{{ asset_url }}">
{% endstylesheets %}