Stylesheet_link_tag, javascript_include_tag con :cache=>true


#1

Se me ha ocurrido probar a meter el :cache => true en los
stylesheet_link_tag y javascript_include_tag

Y fijaos lo que me ha pasado:

  • En localhost-desarrollo no hace nada (correcto, porque
    ActionController::Base.perform_caching es false para development)

  • En localhost-producción, el YSlow reporta una mejora apreciable:
    Estupendo, lo voy a pasar a producción!!

  • En explotación-producción, no se cargan los css ni los javascripts.
    Problema: no existen los archivos /stylesheets/all.css y
    /javascripts/all.js . Miro en mi máquina y sí que están (yo no los he
    creado, los ha metido Rails); los subo al servidor, y todo OK.

¿Alguien sabe cómo se crean y por qué lo ha hecho bien en mi máquina y
no en el servidor? ¿Puede ser un tema de permisos? Y lo principal: cómo
lo arreglo? Porque vistos los resultados, me interesa mantenerlo…

s2


#2

javier ramirez wrote:

En principio ese fichero se crea al arrancar el servidor. Supongo que al
subir la versión nueva has reiniciado, pero si no lo hubieras hecho, tu
mongrel/passenger/loquesea no se habría generado automáticamente. Como
indicas que el cambio en el layout sí lo ha aplicado, entiendo que has
reiniciado y es probable que sea efectivamente un tema de permisos.

Independientemente, quería aprovechar el mail para comentar un pequeño
“patrón” que yo uso para estos ficheros de caché. En lugar de poner
:cache=>true prefiero especificar un nombre de fichero, y de hecho
prefiero ponerle un nombre de directorio+fichero

por ejemplo

<%= javascript_include_tag :defaults, ‘builder.js’, ‘portal.js’,
‘clear-default-text.js’, :cache=>‘cache/support_js’ -%>

por qué? Porque rails crea el fichero al arrancar solamente si no
existía ya. Si ya existe, no lo regenera. Esto significa que si haces un
cambio en tu máquina, tienes que preocuparte de borrar a mano los
ficheros de caché para que vuelva a generarse, y a veces acaba siendo un
poco tedioso, especialmente si tienes diferentes grupos de ficheros y
utilizas diferentes ficheros de caché.

este efecto en la máquina de producción no suele verse porque si usas
capistrano lo normal es que hagas un checkout cada vez, con lo que las
hojas de estilo/javascripts cacheados no existen y se regeneran cada
vez.

al utilizar un directorio, puedes directamente borrar ese directorio
entero cada vez que vayas a rearrancar en producción, sin tener que
preocuparte de que se vaya a borrar nada que necesites. De paso puedes
añadir ese directorio al ignore de tu control de versiones, para que no
ande molestando cada vez que compruebas el estado de la copia local.

un pequeño paso para la humanidad, pero a mí me vale :slight_smile:

Pues efectivamente sí que había reiniciado mi Apache + Passenger, así
que debería haber creado los archivos; ya somos dos en pensar que es muy
probable que sea cuestión de permisos. Pero me parece que tu idea es muy
buena, así que voy a ponerla en práctica, en vez de pelearme con los
permisos (yo tb uso Capistrano).

s2 y muchas gracias!!


#3

Hola,

¿Alguien sabe cómo se crean y por qué lo ha hecho bien en mi máquina y
no en el servidor? ¿Puede ser un tema de permisos? Y lo principal: cómo
lo arreglo? Porque vistos los resultados, me interesa mantenerlo…

En principio ese fichero se crea al arrancar el servidor. Supongo que al
subir la versión nueva has reiniciado, pero si no lo hubieras hecho, tu
mongrel/passenger/loquesea no se habría generado automáticamente. Como
indicas que el cambio en el layout sí lo ha aplicado, entiendo que has
reiniciado y es probable que sea efectivamente un tema de permisos.

Independientemente, quería aprovechar el mail para comentar un pequeño
“patrón” que yo uso para estos ficheros de caché. En lugar de poner
:cache=>true prefiero especificar un nombre de fichero, y de hecho
prefiero ponerle un nombre de directorio+fichero

por ejemplo

<%= javascript_include_tag :defaults, ‘builder.js’, ‘portal.js’,
‘clear-default-text.js’, :cache=>‘cache/support_js’ -%>

por qué? Porque rails crea el fichero al arrancar solamente si no
existía ya. Si ya existe, no lo regenera. Esto significa que si haces un
cambio en tu máquina, tienes que preocuparte de borrar a mano los
ficheros de caché para que vuelva a generarse, y a veces acaba siendo un
poco tedioso, especialmente si tienes diferentes grupos de ficheros y
utilizas diferentes ficheros de caché.

este efecto en la máquina de producción no suele verse porque si usas
capistrano lo normal es que hagas un checkout cada vez, con lo que las
hojas de estilo/javascripts cacheados no existen y se regeneran cada
vez.

al utilizar un directorio, puedes directamente borrar ese directorio
entero cada vez que vayas a rearrancar en producción, sin tener que
preocuparte de que se vaya a borrar nada que necesites. De paso puedes
añadir ese directorio al ignore de tu control de versiones, para que no
ande molestando cada vez que compruebas el estado de la copia local.

un pequeño paso para la humanidad, pero a mí me vale :slight_smile:

saludos,

j


javier ramírez

…i do ruby on rails development in madrid, spain, at
http://www.aspgems.com
…you can find out more about me on http://formatinternet.wordpress.com
and http://workingwithrails.com/person/5987-javier-ramirez