Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Problemas con los archivos .js .css en una aplicación Symfony en producción

4 de octubre de 2015

Hola a todos, mi problema es el siguiente,

Mi aplicación funciona bien en mi máquina pero al desplegarla en producción no me carga los css ni los js. Les dejo algo de la configuración de los asssets para ver si tienen alguna idea de lo que pueda estar pasando.

{% stylesheets
    'assets/vendor/bootstrap/dist/css/bootstrap.min.css'
    'assets/vendor/metisMenu/dist/metisMenu.min.css'
    'assets/vendor/datatables-bootstrap3-plugin/media/css/datatables-bootstrap3.css'
    'assets/vendor/font-awesome/css/font-awesome.min.css'
    'assets/vendor/datetimepicker/jquery.datetimepicker.css'
    'assets/vendor/animate.css/animate.min.css'
    'bundles/app/css/*'
    filter='cssrewrite' output='css/compiled/app.css' %}
    <link rel="stylesheet" href="{{ asset_url }}"/>
{% endstylesheets %}

Al ejecutar el comando assetic:dump en producción me sale este error:

$ /usr/bin/php5 app/console assetic:dump
Dumping all dev assets.
Debug mode is on.
 
09:04:13 [file+] /home/sip/releases/20151004140322/app/../web/css/compiled/app.css
 
  [RuntimeException]
  The source file "/home/sip/releases/20151004140322/app/../web/bundles/app/css/sb-admin-2.css" do
  es not exist.
 
assetic:dump [--forks FORKS] [--watch] [--force] [--period PERIOD] [--] [<write_to>]

Les agradezco si tienen alguna respuesta,


Respuestas

#1

Al parecer, tenías un archivo CSS en src/AppBundle/Resources/public/css/sb-admin-2.css pero por alguna razón ya no se encuentra ese archivo y por eso Assetic muestra ese error.

De todas formas, el comando assetic:dump parece que no lo estás ejecutando en el entorno de producción. A menos que hayas definido alguna variable de entorno en tu servidor, debes indicar --env=prod a todos los comandos que ejecutes en el servidor de producción.

Te aconsejo que hagas lo siguiente:

# Borra la caché completa de esta manera
$ rm -fr app/cache/*
 
# Vuelve a generar los archivos de Assetic
$ php app/console assetic:dump --env=prod --no-debug

@javiereguiluz

4 octubre 2015, 16:35
#2

Gracias Javier, estoy probando lo que me dices , sin embrago quisiera entender por qué al ejecutar el comando app/console assets:install web --symlink no hace referencia a mi AppBundle?

Trying to install assets as symbolic links.
Installing assets for Symfony\Bundle\FrameworkBundle into web/bundles/framework
The assets were installed using symbolic links.
Installing assets for Nelmio\ApiDocBundle into web/bundles/nelmioapidoc
The assets were installed using symbolic links.
Installing assets for FOS\JsRoutingBundle into web/bundles/fosjsrouting
The assets were installed using symbolic links.
Installing assets for Sensio\Bundle\DistributionBundle into web/bundles/sensiodistribution
The assets were installed using symbolic links.

@miguelplazasr

4 octubre 2015, 17:07
#3

Sigue sin funcionar, revise la carpeta web/bundles y solamente tiene

pulsarit@server28 [~/sip/current/web/bundles]# ls
./  ../  fosjsrouting@  framework@  nelmioapidoc@

Y el error es el mismo

[RuntimeException]
  The source file "/home/pulsarit/sip/releases/20151004161926/app/../web/bundles/app/css/sb-admin-2.css" do
  es not exist.

Alguna otra sugerencia?

[UPDATE]

Uno de los problemas que tengo es que en la carpeta AppBundle/Resources/Public/js/ tengo los archivos de AngularJS y obviamente la aplicación no funciona. Gracias

@miguelplazasr

4 octubre 2015, 18:24
#4

Lo que no entiendo es de dónde sale ese archivo sb-admin-2.css. Supuestamente no existe dentro del proyecto, pero Assetic se empeña en querer buscarlo. ¿Has configurado los archivos de Assetic en el archivo app/config/config.yml o solo los tienes configurado en la plantilla layout? ¿Puedes probar a eliminar 'bundles/app/css/*' de la plantilla a ver si así funciona?

@javiereguiluz

4 octubre 2015, 22:23
#5

El archivo sb-admin-2.csses de la plantilla que uso por eso Assetic lo busca. Creo que el problema es de configuración por que fui eliminando uno a uno los archivos que cargo en la plantilla que están ubicados en AppBundle/Resources/publicy cada uno de ellos me marcaba el mismo error con el nombre de cada archivo. Al final elimine todos los archivos de mi Bundle y ya no marca error, pero esto no es solución puesto que necesito cargarlos.

No se que mas habría que configurar en la aplicación para que esto funcione, dejo el fragmento del archivo config.yml a ver si me falta algo.

# Assetic Configuration
assetic:
    debug:          "%kernel.debug%"
    use_controller: false
    bundles:        [ 'AppBundle', 'FOSUserBundle' ]
    #java: /usr/bin/java
    filters:
        cssrewrite: ~
        #closure:
        #    jar: "%kernel.root_dir%/Resources/java/compiler.jar"
        #yui_css:
        #    jar: "%kernel.root_dir%/Resources/java/yuicompressor-2.4.7.jar"

Un punto importante es que este error solo se presenta en producción, en dev no ocurre esto. Agradezco la ayuda.

@miguelplazasr

5 octubre 2015, 5:14
#6

Ahora que vuelves a comentar lo de que solo falla en producción, una pregunta importante: ¿has ejecutado el comando php app/console assets:install --env=prod antes de ejecutar el comando de Assetic?

@javiereguiluz

5 octubre 2015, 8:12
#7

Si, lo ejecuto pero al hacerlo no hace nada con los archivos de mi Bundle.

pulsarit@server28 [~/sip/current]# /usr/bin/php5 app/console assets:install --env=prod
Installing assets as hard copies.
Installing assets for Symfony\Bundle\FrameworkBundle into web/bundles/framework
Installing assets for Nelmio\ApiDocBundle into web/bundles/nelmioapidoc
Installing assets for FOS\JsRoutingBundle into web/bundles/fosjsrouting

Instala lo de otros paquetes pero el de AppBundle no.

@miguelplazasr

5 octubre 2015, 14:57
#8

Si te fijas en el código fuente del comando assets:install, verás lo siguiente:

foreach ($this->getContainer()->get('kernel')->getBundles() as $bundle) {
    if (is_dir($originDir = $bundle->getPath().'/Resources/public')) {
        // ...
    }
}

Como ves, la clave es que AppBundle esté activado en la aplicación y que los archivos CSS y JS se encuentren en el directorio src/AppBundle/Resources/public/

@javiereguiluz

5 octubre 2015, 15:01
#9

Hola Javier, ya logre solucionarlo. El problema que tenia era realmente algo que pase por alto desde el principio y me da vergüenza admitirlo. jejeje. El nombre del directorio public lo tenia nombrado con la P mayúscula, en mi maquina no hay problema, pero en el servidor de producción si hace la diferencia, simplemente me metí al servidor y cambie manualmente el nombre del directorio.

Me surge una duda y es que en mi proyecto local yo realice este cambio pero al subirlo al git no me cambio el nombre del directorio?

Te agradezco mucho la colaboración y disculpa por el tiempo que invertiste en ayudarme.

@miguelplazasr

5 octubre 2015, 16:21
#10

Respondiendo mi ultima pregunta, lo que hice fue lo siguiente,

Actualicé la configuración de git

$ git config core.ignorecase false

Renombré el directorio Public/

$ git mv -f -k src/AppBundle/Resources/Public src/AppBundle/Resources/public

@miguelplazasr

5 octubre 2015, 23:13