systems

Red Moon
Un sistema de archivos organizado es más eficiente y permite realizar búsquedas más rápidas y sencillas. Un servidor web consume muchos recursos para encontrar un fichero en una carpeta con 1.000.000 de archivos, sin embargo si en la carpeta hay 1.000 subcarpetas con 1.000 ficheros cada uno, el acceso será mucho más rápido. El número máximo de ficheros por carpeta para obtener la mayor eficiencia dependerá del hardware disponible en el servidor, aunque en general no conviene que sobrepase los 10.000 elementos. La carpeta files Drupal dispone de un sistema público de archivos donde los módulos pueden guardar todos los ficheros necesarios. Para configurarlo estableceremos en admin/config/media/file-system la ruta de la carpeta que funcionará como raíz. El valor por defecto para esta ruta es sites/default/files, aunque puede configurarse donde más nos interese. Hacer que la carpeta files tenga una estructura de árbol eficiente es muy sencillo, ya que los módulos que utilizan el sistema público de archivos disponen de opciones de configuración para crear subcarpetas donde almacenar los archivos. La mayoría de los ficheros que se almacenan suelen ser imágenes o documentos que los usuarios cargan en los campos de los tipos de contenido cuando se crean los nodos, por lo que la ruta final donde se guardará el archivo dependerá de la configuración que se haya establecido en cada campo. Algunos de los módulos incluidos en el core de drupal que permiten la creación de campos para subir archivos son Field, File e Image, en estos campos se puede configurar una ruta dentro de la carpeta files para poder tener separados los archivos de cada uno. File (Field) Paths te ayuda a organizar A veces no es suficiente con tener una carpeta por campo, por lo que es necesario crear también una estructura de subcarpetas con más profundidad de modo que no se sobrepase el número máximo de ficheros por carpeta que hayamos establecido como límite. La herramienta perfecta para crear esta estructura es el módulo File (Field) Paths, que permite configurar un patrón para la ruta de almacenaje del archivo utilizando valores del nodo mediante el módulo Token. Una vez instalado el módulo aparecen nuevas opciones en la configuración de cada campo. La más interesante es el campo “ruta de archivos”, donde podemos escribir un patrón que se usará para generar la ruta final en la que se almacenará el fichero. Un ejemplo de patrón podría ser: main-image/[node:created:custom:Y]/[node:created:custom:m]/[node:created:custom:d]/ Con este patrón un archivo llamado example.jpg cargado en un campo llamado “Main Image” de un nodo creado el 25 de Junio de 2016 se guardaría en la carpeta “sites/default/files/main-image/2016/06/25/example.jpg” El módulo también ofrece otras opciones adicionales como eliminar las barras (/) o transliterar y limpiar los valores de los tokens para que hacer que las rutas sean amigables y uniformes. Si lo hubiera sabido antes… En muchas ocasiones el sistema se ha creado sin tener en cuenta todos estos consejos y por ello todos los ficheros se encuentran en la raíz de la carpeta files, poco a poco esa carpeta se va llenando y llega un momento en el que se produce un “cuello de botella” en la gestión del sistema de archivos por parte del servidor condicionando el rendimiento general de la web. Llegados a este punto se puede realizar la instalación y configuración del módulo File (Field) Paths, que además nos proporciona varias opciones muy útiles para evitar problemas y facilitar la gestión de los ficheros existentes: Create redirect. Crea automáticamente una redirección entre el fichero antiguo y el nuevo. Retroactive update. El sistema moverá todos los ficheros existentes a la ruta que debería tener en función del patrón establecido en el campo. Active updating. El sistema no moverá los archivos existentes en el momento de guardar el campo, sino que cada vez que un nodo se edite y guarde, el sistema moverá el fichero a su nueva ubicación si es necesario. Es importante tener en cuenta que la ubicación física de los archivos existentes se va a modificar, por lo que estas opciones hay que usarlas con precaución para evitar la aparición de enlaces rotos. Si el número de ficheros existentes es muy grande, no es recomendable marcar la opción "Retroactive update", ya que puede lanzar un proceso que tarde demasiado y no sea capaz de finalizar en el navegador. En estos casos la configuración recomendada es marcar "Active updating" y posteriormente realizar un proceso de actualización controlada de los nodos cuyas imágenes queramos reorganizar. Este proceso se puede hacer con un pequeño módulo que cree una cola de proceso en la que cada nodo se cargue con node_load() y se guarde con node_save(), al guardar el nodo todas las imágenes que tenga en sus campos serán movidas automáticamente a su nueva ubicación. Mejor prevenir que curar Tener que reorganizar imágenes de un sitio web ya en funcionamiento es una potencial fuente de problemas, sin embargo, en las primeras fases del desarrollo es muy rápido y fácil crear una estructura organizada para la carpeta files, no retardará el proyecto y disponer de un sistema así es mucho más ventajoso aunque el número de archivos de la web crezca indefinidamente. Siempre compensará dedicar unos minutos de desarrollo a este asunto, ya que por muy poco tiempo obtenemos grandes beneficios a medio y largo plazo. En el inicio de un proyecto web casi nunca se sabe cómo va a evolucionar, pasado el tiempo puede desaparecer, mantenerse o crecer hasta convertirse en un proyecto con millones de usuarios, por lo que es importante realizar un diseño y desarrollo que permita ser escalable tanto como sea necesario.   Fotografía principal: Anders Jilden
Pingüino pequeño nadando bajo el mar
Dominar la línea de comandos linux es algo de gran ayuda para cualquier desarrollador web que permite ser más ágil e independiente a la hora de trabajar en entornos de desarrollo Linux/Unix. A continuación os dejamos las 20 órdenes más usadas para los novatos que quieran iniciarse en esta magia negra.   cd - Change directory cd <directorio> Cambia el directorio actual de trabajo, es decir, nos mueve a ese directorio.   rmdir - Remove directory rmdir <directorio> Elimina el directorio.   rm - Remove user@server:~$ rm <archivo> Elimina el archivo. user@server:~$ rm -r <directorio> Elimina el directorio y todo su contenido.   cp - Copy user@server:~$ cp <origen> <destino> Copia los archivos y directorios de origen a destino. user@server:~$ cp -r <origen> <destino> Hace lo mismo pero de forma recursiva, es decir, copia los directorios y su contenido.   mv - Move user@server:~$ mv <origen> <destino> Mueve los archivos o directorios de origen a destino. Mueve, no copia!   Clear - user@server:~$ clear Limpia todo el texto del terminal y lo deja como si acabaramos de abrirlo.   History - Historial user@server:~$ history Muestra los últimos comandos introducidos por el usuario actual.   Cat - Concatenar user@server:~$ cat -n Muestra el contenido de un archivo numerando las líneas.   Head - user@server:~$ head Muestra las primeras 10 líneas del archivo especificado.   Tail - user@server:~$ tail Muestra las últimas 10 líneas del archivo especificado.   pwd - Print work directory user@server:~$ pwd Muestra el direcorio de trabajo, es decir, en el que estas ubicado.   touch - Actualizar user@server:~$ touch <nombre de archivo> Crea un archivo vacío con el nombre especificado, si el archivo existe actualiza la fecha de modificación.   wget - www get user@server:~$ wget <url> Descarga el archivo del sitio web especificado. user@server:~$ wget -r <url> Descarga el sitio web especificado completo (-r de forma recursiva hasta 5 niveles del sitio).   ps - Process status user@server:~$ ps -aux Muestra información sobre todos los procesos que se están ejecutando en el sistema.   top - Top processes user@server:~$ top Muestra información sobre los procesos que más CPU consumen. user@server:~$ top -u <username> Muestra información sobre los procesos top solo ejecutados por un usuario concreto.   man - Manual user@server:~$ man <nombre-comando> Muestra las páginas de ayuda de ese comando.   whatis - What is this command user@server:~$ whatis <nombre-comando> Muestra una breve descripción sobre lo que hace o para que sirve el comando consultado.   unzip - un zip file user@server:~$ unzip <nombre-archivo.zip> Descomprime un archivo zip. user@server:~$ unzip -l <nombre-archivo.zip> Lista el contenido de un archivo sin descomprimirlo.   tar - Tape archive Crea, muestra y extrae archivos .tar (el nombre viene de los sistemas de cinta magnetica antiguos) user@server:~$ tar -cvf <nombre-archivo.tar> <archivo1> <archivo2> Crea un archivo que contiene los archivos indicados. user@server:~$ tar -xvf <nombre-archivo.tar> Extrae el contenido del archivo tar.   gzip - GNU zip user@server:~$ gzip <nombre-archivo> Crea y descomprime archivos gzip.     Y para terminar uno extra, Drush: una herramienta especifica para Drupal. Con ella puedes acceder a casi todas las funciones de una instalación drupal desde la línea de comando. drush - interfaz de comandos para drupal user@server:~$ drush cc Limpia la cache del sitio drupal. user@server:~$ drush vset maintenance_mode 1 Pone el sitio en modo mantenimiento. Aquí tienes la lista completa de comandos drush.   Fotografía principal: Uriel Soberanes