18

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

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

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

这篇文章symfony2 assetics yui 压缩器 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/ 根据https://bugs.php.net/bug.php?id=60120,php5.3.8的 proc_open 和数据 > 2048 字节 可能存在问题,从 git 存储库(https: //github.com/symfony/symfony/issues/3216)。发出“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 并杀死脚本,你只会看到错误消息正确的地方!)

现在,情况似乎好一些了,但仍然无法使用 sass(我认为它可以与其他一些过滤器一起工作)我设法在 Process.php 中(大约第 172 行)在“$data = fread($管道, 8192);" :脚本第二次在这个地方通过,$pipe 指向第二个资源,它永远不会返回......并且 php 卡住并且很难出来(我需要杀死/重新启动 wamp 至少两次才能能够进行另一次测试)

我真的不熟悉 proc_open 和流,我很难理解代码在那里试图做什么......

我希望这可以帮助下一个尝试让事情正常进行的人,并最终帮助我的案子。仍在寻找有关此事的一些支持!

_____更新:

进一步的测试让我意识到,当 sass 文件足够小时,我可以让“php app/consoleassetic:dump”工作。在我看来,实际的 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 和 compass 0.12

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

将指南针更新为 0.12

"gem update --system"

进而

"gem install compass"

2.修改compass中的compiler.rb

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

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""

然后,您只需在 cli 中键入“php app/console assetic:dump --no-debug”即可在 web\css 中创建 css 文件并刷新站点页面。等等……瞧!(希望!)

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

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

4

2 回答 2

3

如果有人来这里寻找答案,就像对这个问题的更新(或者对于只使用 sass 而不是指南针的人)。现在应该需要的是:

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

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

这是使用 PHP 5.4

于 2012-12-05T10:12:53.497 回答
2

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

这是对我尝试让 Assetic 在 Windows 上工作所花费的时间的非常全面的报道。


根据您的示例- 您不需要添加cssrewrite过滤器。以下是我使用 Twig 中的 Compass 的方法:

{% stylesheets filter='compass' output='css/compiled/*.css' 'css/example.scss' %}
    <link rel="stylesheet" href="{{ asset_url }}">
{% endstylesheets %}
于 2012-03-11T20:12:44.683 回答