如何在Windows中使用Symfony2来使用Assetic + sass?

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

我一直在这个问题上摆弄几个小时,从我收集的当前资产版本(1.0.2)搞砸了,只是不能在Windows中工作。

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

这篇文章介绍了Windows上的symfony2资产yui压缩器(path语法)给出了一些关于这个问题的很好的见解,但不幸的是,它build议的资产库的变化还不足以使其在我的环境中正常工作。

我还在https://github.com/kriswallsmith/assetic/commit/5621cd449b0d85316e5872d672e7e900edc2246c和https://github.com/kriswallsmith/assetic/issues/25中发现了一些有趣的内容

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

我需要的是能够得到一个工作configuration的人给我指向我失踪的东西,或者理想的是要让这个该死的东西工作的步骤。

任何人都可以完成任务?

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

新元素:

1 / php5.3.8可能与proc_open和数据> 2048字节的问题按照https://bugs.php.net/bug.php?id=60120这个问题可以从git仓库获取symfony( 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中的path进行了一些小的修改(参见https://github.com/kriswallsmith/assetic/issues/92 ),但是我不确定这是相关的。 无论如何,我从这个资产获得的命令行工作在一个shell并输出预期的CSS。

3 / sass.bat(位于Ruby193 \ bin)需要具有ruby.exe的绝对path才能进一步(我了解到,如果你var_dump和kill脚本,只能看到错误信息正确的地方!)

现在,事情似乎好一点,但仍然没有与sass工作(我认为它可以与其他一些filter正常工作)我设法隔离Process.php中(第172行)在“$ data = fread($pipe道,8192);“ :第二次脚本在这个地方通过,$ pipe指向第二个资源,它永远不会返回…和PHP卡住了,真的很难出来(我需要至less杀死/重新启动wamp至less两次能够做另一个testing)

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

我希望这可以帮助下一个尝试有所作为,并最终帮助我的情况。 还在寻求一些关于此事的支持!

_____Update:

进一步的testing让我意识到,当sass文件足够小时,我可以使用“php app / console assetic:dump”工作。 在我看来,实际的CSS规则(不包括variables定义和混合)需要我小于4096字节与php5.3.10,甚至更less的PHP 5.3.8。 这是指向https://bugs.php.net/bug.php?id=60120和https://bugs.php.net/bug.php?id=51800中描述的proc_open错误

_____Update:

我试图安装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.改变compass中的compiler.rb

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

 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中使用绝对path

进入你的Ruby193 \ bin目录并编辑compass.bat来设置ruby.exe的绝对path(在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 %} 

testing:

为了testing,你可以使用

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

那样的话,如果你像我一样进入一个无限循环,你可以按Ctrl + C,这使得testing的方式比在浏览器中更有效率

/!\绝对需要使用–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 

向您展示当前的命令行,并对其进行testing。

我目前看起来像这样:

 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中input“php app / console assetic:dump –no-debug”来在web \ css中创buildcss文件并刷新你网站的页面。 Et …瞧! (希望!)

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

我疯狂地把头发拉了几天,希望这个post对别人的心理健康有帮助;)

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

这是一个非常全面的报道,花费在尝试在Windows上运行Assetic的时间。


根据你的例子 – 你不需要添加cssrewrite过滤器。 以下是我如何使用树枝指南针:

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

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

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

这是使用PHP 5.4