windows symfony sass compass-sass assetic

¿Cómo hacer que Assetic+sass funcione con Symfony2 en Windows?



compass-sass (2)

Consulta mi respuesta a la pregunta ¿Cómo usar el filtro SCSS en Symfony2 en Windows ?: https://stackoverflow.com/a/9658410/3765

Es una cobertura bastante completa de mi tiempo dedicado a intentar que Assetic funcione en Windows.

Según su ejemplo , no debería necesitar agregar el filtro cssrewrite . Así es como uso Compass de Twig:

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

Estoy tratando de hacer que Assetic se ejecute dentro de Symfony 2.0.11 para usar sass para archivos css.

He estado jugando con el problema durante horas, y de lo que recojo, la versión de Assetic actual (1.0.2) está jodida y no puede funcionar en Windows.

Intenté actualizar assetic and asseticBundle a la última versión Master de github, pero requieren Symfony 2.1, que trae muchos cambios y no es compatible con versiones anteriores (por no mencionar que tampoco se lanzó oficialmente), así que no es una opción.

Este post symfony2 assetics yui compressor en windows (sintaxis de ruta) ofrece una buena idea al respecto, pero desafortunadamente los cambios en la biblioteca assetic que recomienda no son suficientes para que funcione correctamente en mi entorno.

También encontré algunos bits interesantes en https://github.com/kriswallsmith/assetic/commit/5621cd449b0d85316e5872d672e7e900edc2246c y https://github.com/kriswallsmith/assetic/issues/25

Al final, lo que sé es que necesito modificar el proveedor / assetic / src / Assetic / Util / ProcessBuilder.php, tal vez algunos otros archivos en el paquete, y tal vez agregar algunas informaciones en mi archivo config.yml (parece que se agrega) el camino a java o sass puede ayudar).

Lo que necesito es que alguien que pueda obtener una configuración de trabajo me dé indicaciones sobre lo que me estoy perdiendo, o idealmente los pasos necesarios para que esa maldita cosa funcione.

¿Alguien a la altura de la tarea?

_____Actualización: Todavía cavando, solo han pasado 3 días: /

Nuevos elementos:

1 / php5.3.8 puede tener un problema con proc_open y datos> 2048 bytes según https://bugs.php.net/bug.php?id=60120 Este problema puede tener implicaciones al obtener Symfony desde el repositorio de git ( https://github.com/symfony/symfony/issues/3216 ). emitir "git config --global core.autocrlf input" y volver a buscar todo desde git me permitió usar php5.3.10 sin bloqueo.

2 / https://github.com/kriswallsmith/assetic/commit/5621cd449b0d85316e5872d672e7e900edc2246c parece una base decente. He realizado algunas modificaciones menores en las rutas en Process.php (consulte https://github.com/kriswallsmith/assetic/issues/92 ) pero no estoy seguro de que sea relevante. De todos modos, la línea de comandos que recibo de Assetic en este punto funciona en un shell y genera el css esperado.

3 / sass.bat (ubicado en Ruby193 / bin) necesita tener una ruta absoluta a ruby.exe para ir un poco más lejos (aprendí que de la manera más difícil, solo ves el mensaje de error si var_dump y matas el script en ¡el lugar correcto!)

Ahora, las cosas parecen un poco mejor, pero aún no funciona con Sass (creo que funcionaría bien con algunos otros filtros) logré aislar el problema en Process.php (alrededor de la línea 172) en "$ data = fread ($ tubo, 8192); : La segunda vez que el script pasa en este lugar, con $ pipe que apunta al segundo recurso, nunca regresa ... y php se queda atascado y tiene tiempos realmente difíciles saliendo (necesito matar / reiniciar el wamp al menos dos veces para ser capaz de hacer otra prueba)

Realmente no estoy familiarizado con proc_open y streams, y tengo dificultades para entender qué es lo que el código intenta hacer allí ...

Espero que esto pueda ayudar a la siguiente persona que intenta que las cosas funcionen, y eventualmente también ayude mi caso. ¡Sigo buscando algo de apoyo al respecto!

_____Actualizar:

Pruebas adicionales me hicieron darme cuenta de que podría tener el trabajo de "php app / console assetic: dump" cuando el archivo sass era lo suficientemente pequeño. Me parece que las reglas reales de css (excluyendo las definiciones de variables y los mixins) me necesitan menos de 4096 bytes con php5.3.10, incluso menos con php 5.3.8. Eso apunta al error proc_open descrito en https://bugs.php.net/bug.php?id=60120 y https://bugs.php.net/bug.php?id=51800

_____Actualizar:

Intenté instalar php5.4 para comprobar si estaba solucionando el problema. Me tomó un tiempo darme cuenta que la razón por la que esta versión no funcionaba en mi computadora es porque todavía no hay una compilación x64. Luego instalé la versión de 32 bits de wamp y conseguí que php5.4 trabajara con ella fácilmente. Resultado final: proc_open aún cuelga :( Estoy empezando a estar sin ideas aquí ...

Tutorial:

Así que, finalmente, conseguí que esto funcionara, y pensé que intentaría resumir los pasos más importantes para los espectadores posteriores:

1. Tener Ruby 1.9.3 y compás 0.12 instalados

visita http://rubyinstaller.org/downloads/

Actualiza la brújula a 0.12 con

"gem update --system"

y entonces

"gem install compass"

2. Alterar compiler.rb en brújula.

Vaya a Ruby193 / lib / ruby ​​/ gems / 1.9.1 / gems / compass-0.12.0 / lib / compass en la línea 10, reemplace

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

con

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

/! / con alguna configuración, puede ser al revés, pero con la configuración que estoy tratando de describir, sigue este camino.

3. Señala Assetic a la última versión que funciona con Symfony 2.0.11.

editar el archivo deps como tal:

[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

/! / también deberá eliminar las referencias a una versión específica en el archivo deps.lock!

y emita un "php bin / vendors install".

4. Cambia tu config.yml

Así es como se ve el mío ahora:

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

5. Usa la ruta absoluta en compass.bat / sass.bat

Vaya a su directorio Ruby193 / bin y edite compass.bat para establecer una ruta absoluta a ruby.exe (haga lo mismo con sass.bat mientras está en ello)

6. Cambia la llamada en plantilla.

Así es como se ve la mía ahora:

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

Pruebas:

Para las pruebas, puede utilizar

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

De esa manera, si te metes en un bucle sin fin como lo hice yo, solo puedes presionar Ctrl + C, lo que hace que las pruebas sean más eficientes que en un navegador.

/! / Es absolutamente necesario usar --no-debug, o terminarás con un montón de líneas no deseadas en tu css que se parecen a:

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

Puedes usar

die($this->commandline);

en el método de ejecución de

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

para mostrarle la línea de comando actual, y probarla.

El mío actualmente se ve así:

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

Entonces solo necesita escribir "php app / console assetic: dump --no-debug" en su cli para crear los archivos css en web / css y actualizar la página de su sitio. Et ... ¡voila! (¡Ojalá!)

Nota: Como puede haber notado, estoy usando el CompassFilter en lugar del SassFilter. Esto se debe a que hace lo mismo (y más) y se puede hacer que haga lo que esperamos de él. Si alguien puede descubrir cómo arreglar el SassFilter, eso sería genial. Mientras tanto, ya he pasado demasiado tiempo en esto.

He estado tirando de mi cabello durante días en esa locura, espero que este post sea útil para la salud mental de otras personas;)


Solo como una actualización de esta pregunta (o para cualquiera que solo use Sass, no brújula) si alguien viene aquí en busca de la respuesta. Todo lo que se necesita ahora es:

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

Esto es usar PHP 5.4