2011-07-01 14 views
10

He probado el compresor YUI en la línea de comandos (en Windows) y parece funcionar bien.Compresor Assetic + YUI en Symfony 2: ¿es esto un error?

Pero el Css creado por Assetic no se comprime, y viene con este mensaje en la parte superior (en el interior del Css!):

/* 
[exception] 500 | Internal Server Error | RuntimeException 
[message] 
[1] RuntimeException: 
      at n/a 
       in E:\websites\symfony2\public_html\Symfony\vendor\assetic\src\Assetic\Filter\Yui\BaseCompressorFilter.php line 81 

      at Assetic\Filter\Yui\BaseCompressorFilter->compress(' 

Es este un problema de configuración? ¿O un error en assetic?

Aquí está el código que se utiliza dentro de mi plantilla ramita:

{% stylesheets '@CompanyBundlenameBundle/Resources/public/css/style.css' filter='yui_css' %} 
<link rel="stylesheet" type="text/css" media="screen" href="{{ asset_url }}" /> 
{% endstylesheets %} 
+0

Tengo este mismo problema exacto, pero en Mac OS X Lion. –

+0

Parece que YUI está arrojando este error. ¿Eres capaz de ejecutar el compresor sobre style.css fuera de Assetic? –

Respuesta

4

YUI compresor necesita ser definir en su app/config/config.yml así:

assetic: 
    debug:   %kernel.debug% 
    use_controller: false 
    filters: 
     cssrewrite: ~ 
     yui_css: 
      jar: %kernel.root_dir%/Resources/java/yuicompressor-2.4.6.jar 

Por supuesto, es necesario descargar el compresor YUI y cópielo en su directorio /app/Resources/java/.

Advertencia, el haz Assetic no publica tu CSS compresa automaticamente, lo necesario para publicar de forma manual con el siguiente comando:

php app/console assetic:dump 
+0

En el desarrollador, los publica automáticamente. De todos modos, probé el comando de volcado y apareció el mismo error: RuntimeException. Esto es frustrante, parece que solo prueban el código en Linux. – HappyDeveloper

+0

Trabajo en Linux y no puedo reproducir su error en mi sistema. Pruebe el problema [symfony github] (http://github.com/symfony/symfony), el equipo es muy reactivo. – egeloen

3

acabo de recibir este mismo problema.

lo que hice para resolver:

  • Abrir el archivo "deps".
  • Elimine la línea "version = v1.0.0RC1" en la sección "[AsseticBundle]".
  • Ejecute el comando "bin/vendors update" para obtener la última versión de AsseticBundle.

Espero que esto ayude.

3

No estoy seguro de haber resuelto esto, pero tuve el mismo problema hoy.

Seguí las sugerencias anteriores, pero aún así no me gusta.

Así que mirado en el error interno 500 y el error que estaba recibiendo era:

[message] Warning: file_put_contents(): Filename cannot be empty in /Applications/MAMP/htdocs/shop/vendor/assetic/src/Assetic/Filter/Yui/BaseCompressorFilter.php line 84 

miré en el archivo en la línea 84 y que la línea tenía:

$input = tempnam(sys_get_temp_dir(), 'assetic_yui_compressor'); 

Después de algo de investigación alrededor y la depuración encontré que los permisos en mi directorio temporal utilizado por el sys_get_temp_dir() era incorrecto.

Una vez que resolví estos permisos funcionó bien.

No estoy seguro de si este fue el mismo error que recibió, pero si es así, espero que esto ayude.

Saludos

Adam

5

que tienen el mismo problema ...(El problema parece presentes sólo en las ventanas) La única manera que he encontrado, es muy sucio:

1 - indique la ruta ejecutable de java en el archivo de configuración (en el mismo lugar de la vía Yui declaración frasco)

yui_css: 
    jar: "%kernel.root_dir%\\Resources\\java\\yuicompressor.jar" 
    java: "C:\\Program Files\\Java\\jre6\\bin\\java.exe" 

2 - Abrir el archivo Assetic \ Util \ process.php Cambie la línea "proc_open" (línea 123 mi versión) en la "carrera" método línea original:

$process = proc_open($this->commandline, $descriptors, $pipes, $this->cwd, $this->env, $this->options); 

línea de modificación:

$process = proc_open('"'.$this->commandline.'"', $descriptors, $pipes, $this->cwd, $this->env, $this->options); 

y es obras ... pero no es una solución real ...

Si alguien tiene más información ... gracias :)

5

Si está utilizando la última versión estable (1.0.2), entonces tiene un error que impide que use correctamente el compresor YUI en Windows. Como @Pierre ha señalado, el problema radica en la forma en que se llama a la función proc_open, pero la corrección debe aplicarse en otro lugar.

Si usted tiene un vistazo a la clase Assetic \ Util \ ProcessBuilder podrás encontrar al culpable en la línea 95:

#95 if (defined('PHP_WINDOWS_MAJOR_VERSION')) { 

No hay tal constante en PHP como PHP_WINDOWS_MAJOR_VERSION (http://php.net/manual/en/info.constants.php), lo que hace que la sentencia if prueba evaluar a falso. Lo que se debe usar en su lugar es PHP_WINDOWS_VERSION_MAJOR.

La segunda cuestión que se encuentran en esta clase es un par de líneas de abajo:

#102 if ($args) { 
#103 $script .= ' '.implode(' ', array_map('escapeshellarg', $parts)); 
#104 } 

$parts no está definido en este alcance y debe ser reemplazado con $args.

Como me enteré más tarde, ambos problemas se han corregido en 16.09 en este compromiso: https://github.com/kriswallsmith/assetic/commit/cc2e9adb744df0704a5357adc1cf9287c427420f pero el código aún no se ha etiquetado.

Espero que esto ayude.

+0

Gracias por la solución. Soluciona mi problema – Permana

2

Gracias a la publicación anterior de Jan Molak, pude ejecutar con éxito Assetic Less Filter en Symfony 2 en Windows Vista.

En mi archivo deps me han cambiado

[assetic] 
    git=http://github.com/kriswallsmith/assetic.git 
    version=v1.0.3 

en

[assetic] 
    git=http://github.com/kriswallsmith/assetic.git 
    version=cc2e9adb744df0704a5357adc1cf9287c427420f 

y luego ejecutar

php bin\vendors update 

espero que esta actualización no causar otros problemas. Por ahora todo parece funcionar como se esperaba.