Mostrando entradas con la etiqueta drupal. Mostrar todas las entradas
Mostrando entradas con la etiqueta drupal. Mostrar todas las entradas

jueves, 16 de enero de 2014

Profiling Drupal 7 con XHProf y Apache2


¿Problemas de rendimiento en Drupal?¿Qué sucede y dónde sucede? Para responder a la segunda pregunta existen las herramientas de "profiling", que nos ayudarán a identificar las funciones que más recursos están consumiendo, el número de llamadas a cada función e infinidad de información a mayores. Si desarrollas con Drupal no puedes prescindir de XHProf.

XHProf es una extensión PECL desarrollada por el equipo de ingeniería de Facebook como alternativa a XDebug que sirve para hacer profiling de aplicaciones PHP.

Su instalación en un entorno Linux + Drupal es muy sencilla.

Instalamos la extensión vía PECL

    pear channel-update pear.php.net
    sudo apt-get install php5-common graphviz
    sudo pecl config-set preferred_state beta
    sudo pecl install xhprof

Creamos el directorio temporal para almacenar los datos. En mi caso :


mkdir /var/tmp/xhprof
chmod 777 /var/tmp/xhprof

Habilitamos la extensión creando el fichero /etc/php5/apache2/conf.d/xhprof.ini con el contenido

[xhprof]
extension=xhprof.so
xhprof.output_dir="/var/tmp/xhprof.conf"

Creamos un "alias" para construir la url de acceso al output de XHProf.

alias /xhprof_html "/usr/share/php/xhprof_html"

Reiniciamos Apache2

apache2ctl -t
service apache2 restart

La integración con Drupal es muy sencilla y se puede realizar directamente desde Drush seguiendo estos pasos:

drush dl devel
drush en devel
drush vset devel_xhprof_enabled 1
drush vset devel_xhprof_directory "/usr/share/php"
drush vset devel_xhprof_url "/xprof_html"

Si pedimos en nuestro navegador la url http://tu.sitio.local/xhprof_html obtendremos todos los datos del profiling.



Bonus:



jueves, 14 de febrero de 2013

Molom Error :Invalid API keys. Error 401: Invalid authentication.

No hay sitio, portal o proyecto web que se precie que no use un CAPTCHA para evitar spam, bien sea en formularios de registros de usuarios, comentarios..etc.¿He dicho CAPTCHA? Eso es historia. Si todavía sigues usando CAPTCHA sigue leyendo, te interesa.

Yo(nosotros) uso Mollom, un software desarrollado para cumplir un único objetivo: evitar spam en tu sitios web. Y lo hace muy bien! Su creador es Dries Buytaert, os suena de algo? Si queréis saber más acerca del proyecto visitad su web, está todo muy claro.

[ Detalle de las estadísticas de Mollom para el dominio www.comunidadeozulo.org ]

Al grano. El caso es que este módulo para Drupal 6.X cada X tiempo devolvía errores de validación OAuth contra el servicio de autenticación REST de Mollom.com. Y tras muchas vueltas, y bueno, por qué no decirlo, la inestimable ayuda de los fotos de Drupal.org, he encontrado la solución al error:


"Invalid API keys.Error 401: Invalid authentication."


y la he adaptado para un servidor corriendo Debian GNU/Linux y Drupal.

El error es muy simple.¡La zona horaria del servidor está mal configurada!¡Por eso "casca" el proceso de autenticación de Mollom!. La solución, muy sencilla:

1.- ntp. Sincroniza tu servidor/máquina con ntpdate. Puedes añadir una tarea "cron" para el que servidor sincronize el reloj cada día, por ejemplo:


30 * * * *    root     ntpdate.hora.rediris.es > /dev/null 2>&1

2.- Configura la zona horaria del servidor

dpkg-reconfigure tzdata


Ahora Mollom debería funcionar sin problemas!

martes, 27 de noviembre de 2012

drush y drush make Drupal

A modo de "chuletilla" publico unas notas sobre la instalación de "drush" y "drush make" para Drupal dedicadas a mi compañero de batallas drupaleras @jcartelle.

La instalación de drush en GNU/Linux es super sencilla. Nos aseguramos de que hemos instalado en nuestro sistema el paquete "php-pear".


root@toshiba-sdk:/home/apermuy/wwwroot/test/varios# dpkg-query --status php-pear
Package: php-pear
Status: install ok installed
Priority: optional
Section: php
Installed-Size: 2228
Maintainer: Ubuntu Developers
(...)
 PHP5 is a widely-used general-purpose scripting language that is
 especially suited for Web development and can be embedded into HTML.
 The goal of the language is to allow web developers to write
 dynamically generated pages quickly.
Homepage: http://www.php.net/
Original-Maintainer: Debian PHP Maintainers

En caso contrario, ya sabéis:
apt-get -y install php-pear

Seguimos las instrucciones de instalación del sitio http://drupal.org/project/drush .

pear channel-discover pear.drush.org
pear install drush/drush

Perfecto! Ya tenemos instalado drush en nuestra máquina. Ahora vamos con "drush make".  Esta maravilla nos permite levantar sitios web con Drupal 6 / 7 cargando un perfil con los módulos o temas que hemos seleccionado previamente. Para la selección de estos módulos utilizaré la herramienta http://drushmake.me/ que nos permite de un modo sencillo y rápido seleccionar tanto módulos como temas. Una vez seleccionados hacemos "clic" en "Generate makefile" y descargamos el fichero en "crudo"(link "raw makefile".



Ahora movemos el fichero(en mi caso varios.make) varios.make al directorio raíz (en mi caso) del servidor web y generamos el directorio de instalación.
mv /tmp/varios.make /home/apermuy/wwwroot/test/varios
drush make varios.make postblog



Ahora sólo tenemos en acceder al directorio y ejecutar "drush site-install".

drush site-install --site-name="Post Blog" --account-name=admin --account-pass=admin --db-prefix=test3_ --db-url=mysql://drupales:drupales@localhost/drupales

Observaciones:
  • prefix: suelo usar prefijos en las tablas para entornos en desarrollo, me permite usar una única base de datos para todas las pruebas.
Saludos.

miércoles, 21 de marzo de 2012

Consejos para asistir a la IV Noite Drupal & GNU/Linux en A Coruña


Se acerca la IV Noite Drupal & GNU/Linux en A Coruña . Comentaré unos detalles a modo de consejos que pueden ser útiles para los asistentes, sobre todo para los que acuden por primera vez a este tipo de eventos.

  • Descansa. Duerme bien por que la jornada promete. En esta edición comenzaremos a las 11:00 de la mañana, así que imagínate....No te acuestes "a las tantas" sobre todo si tienes que desplazarte el mismo día del evento.
  • Contactos. Email , Twitter o incluso el teléfono de alguno de los organizadores puede ser de gran ayuda si tienes dificultades para llegar, buscar aparcamiento...En drupal_gl(@)googlegroups.com puedes incluso preguntar si alguno de los asistentes viajará en coche.
  • Más contactos. No tengas reparo en pedir "email", "twitter" o "perfil en Drupal.org". La #noitedl es un evento para promocionar Drupal, GNU/Linux y software libre, pero también para conocer a gente "nueva" y proyectos más que interesantes en los que poder participar o aportar. Visitar los sitios web de los organizadores también puede ayudarte: Ociorum, GALPon, Inestable e Comunidade O Zulo .
  • "Be social". ¿Tienes identi.ca?¿Twitter? ¿Facebook?¿Web?¿Flickr?Promociona el evento en las redes sociales! El hashtag "oficial" será #noitedl .
  • ¿Portátil?. Sí, es recomendable traer portátil, sobre todo si estás interesado en aplicar los conocimientos, módulos y "hacks" que se comenten/aporten durante toda la jornada. Mi consejo particular es que NO te pares demasiado en la instalación. Céntrate en lo que es Drupal(siempre desde mi punto de vista) los conceptos básicos : core, módulos y theming.
  • ¡No uso GNU/Linux! . Nadie se ha muerto por no usar GNU/Linux. Estarás rodeado de fauna GNU/Linuxera, así que si decides dejar el lado oscuro, es un buen momento. En caso contrario, saber qué es un "stack" puede facilitar tu aterrizaje en la #noitedl.
  • Colabora. Si tienes tiempo colabora con la organización. ¿Cómo? En ocasiones ayudar a montar una mesa o configurar un punto de acceso wireless es más importante que "un nuevo módulo que lo flipas". Ayúda a la organización!
  • Únete.Hemos creado un grupo de "usuarios galegos" de Drupal en http://groups.google.com/group/drupal_gl . ¿Tienes dudas?¿Alguna consulta? ¿Recomendaciones? Únete, te estamos esperando.

Nos vemos este sábado en A Coruña!

domingo, 24 de abril de 2011

Charla Drupal Xornadas Inestable Ordes

El pasado Jueves 21 tuve la oportunidad de dar una ponencia de introducción a Drupal en el marco de las VIII Xornadas de Software Libre de Ordes, organizadas por Inestable. Lo que en un principio se concretó para una charla de 90 minutos superó las dos horas y media, buena o mala señal la verdad es que no lo sé, pero sí pude comprobar cómo Drupal y el desarrollo web con CMSs interesa al público asistente a este tipo de eventos.

Desde aquí quiero agradecer la amabilidad de Nika, Salva, los demás miembros de Inestable y todos los asistentes al evento. ¡Seguid así amigos!

Si os interesa la presentación, como suele ser habitual, la he subido a mi rincón de Slideshare:

Obradoiro Drupal
Ver todas las presentaciones de Alberto Permuy Leal

La verdad es que el tema Drupal en Galicia, actualmente me tiene un poco abrumado. Hay mucho interés, y me da la impresión de que después de la II Noite Drupal & GNU/Linux esto va a ir a más. Estamos organizando la segunda, y ya nos han ofrecido colaboración para la III. No soy ni pretendo ser un gurú del tema. Me interesa Drupal por que reconozco que es software de calidad, y lo más importante : es libre.

Salud!

martes, 19 de abril de 2011

Exportar consulta MySQL a CSV desde Python

A modo de apunte dejo un pequeño script en Python para exportar una consulta MySQL a CSV. Estoy bastante liado con un pequeño proyecto relacionado con Moodle y Drupal. El caso es que NO se puede tocar NADA del Moodle y los mismos usuarios de Moodle deben tener acceso a Drupal. He dedicado tiempo a buscar un módulo que permita cambiar el modo de validación de Drupal, pero no he encontrado apenas información. No, no me vale el MoodleSSO.


#!/usr/bin/python
#-*- coding: UTF-8 -*
import _mysql
mysql_servidor = 'localhost'
mysql_usuario = 'user'
mysql_clave = 'ejemplo'
mysql_bd = 'moodle'
conexion = _mysql.connect(host=mysql_servidor, user=mysql_usuario, passwd=mysql_clave, db=mysql_bd)
sql = "SELECT username,password,email INTO OUTFILE '/tmp/drupal_export.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '\\\\' FROM mdl_user "
conexion.query(sql)
conexion.close()

miércoles, 6 de abril de 2011

Sobre Memcached, Apache2 y Drupal



Llega un momento en la vida de un sitio web levantado con Drupal(este es mi caso) en que, bien por el número de visitas o por la complejidad de las consultas, se hace necesario instalar y configurar un sistema de cacheo de contenido que agilice el proceso de envío de información.

No voy a entrar en que si proxy inverso, APC o mil gaitas, sólo trataré el proceso de instalación y configuración de memcache ejecutado en una máquina corriendo Debian GNU/Linux 6.0 Squeeze y Apache2 un sitio web con Drupal 6. Comenzamos descargando y activando el módulo "Memcache API and Integration" del sitio drupal.org.

A continuación, lo primero que debemos hacer es actualizar las fuentes de nuestra distribución Debian GNU/Linux:
[root@localhost] aptitude update

Una vez finalizado el proceso instalaremos dos paquetes:
  • memcached: "daemon" o servicio de cacheo diseñado específicamente para que los sitios web dinámicos decrementen la carga de las bases de datos almacenados objetos en memoria. Danga Interactive desarrolló memcached para mejorar la velocidad de LiveJournal.com un sitio que tuvo más de 20 millones de vistas de páginas dinámicas cada día para 1 millón de usuarios con un puñado de servidores web y un puñado de servidores de base de datos. memcached reduce la carga de la base de datos a casi nada, mejorando los tiempos de carga de las páginas para los usuarios, la utilización de los recursos y haciendo más rápido el acceso a las bases de datos.
  • php5-memcache y php5-memcached: Extensión que permite a las aplicaciones escritas en PHP5 comunicarse con los servidores memcache.
Como (casi) siempre en Debian GNU/Linux:
[root@localhost] aptitude -y install php5-memcached php5-memcache memcached

Si este paso se ha ejecutado correctamente debemos configurar qué tipo de estrategia hash utilizará memcache para manejar los objetos de la caché. Dos opciones : standard o consistency. Por lo que leído la tendencia es utilizar esta última, ya que si estamos trabajando con varios servidores memcache evitaríamos problemas al tener que compartir una misma instancia de ejecución de PHP-Apache2. Resumiendo:

Añadimos:

memcache.hash_strategy="consistent"
al fichero /etc/php5/apache2/php.ini.

Modificamos el fichero settings.php de nuestro sitio Drupal y añadimos:


$conf = array(
// The path to wherever memcache.inc is. The easiest is to simply point it
// to the copy in your module's directory.
'cache_inc' => './sites/default/modules/memcache/memcache.inc',

'memcache_servers' => array(
'localhost:11211' => 'default',
'localhost:11212' => 'content',
'localhost:11213' => 'filter',
'localhost:11214' => 'menu',
'localhost:11215' => 'page',
'localhost:11216' => 'views',
),
'memcache_bins' => array(
'cache' => 'default',
'cache_content' => 'content',
'cache_filter' => 'filter',
'cache_menu' => 'menu',
'cache_page' => 'page',
'cache_views' => 'views',
),

Lo realmente curioso de esta configuración para Drupal6, o por lo menos a mi llama mucho la atención, es la posibilidad de dedicar distintas máquinas a diferentes objetos de cache: views, menús...Intentaré darle una vuelta a este tema.
Para finalizar, he visto en este blog, que hay gente que reemplaza el fichero /etc/init.d/memcached por un con contenido similar a este:




#!/bin/bash
prog="memcached"
start() {
echo -n $"Starting $prog "
# Sessions cache.
memcached -m 16 -l 0.0.0.0 -p 11211 -d -u nobody
# Default cache.
memcached -m 32 -l 0.0.0.0 -p 11212 -d -u nobody
# Block cache.
memcached -m 32 -l 0.0.0.0 -p 11213 -d -u nobody
# Content cache. Holds fully loaded content type structures.
memcached -m 16 -l 0.0.0.0 -p 11214 -d -u nobody
# Filter cache. Usually the busiest cache after the default.
memcached -m 32 -l 0.0.0.0 -p 11215 -d -u nobody
# Form cache.
memcached -m 32 -l 0.0.0.0 -p 11216 -d -u nobody
# Menu cache.
memcached -m 32 -l 0.0.0.0 -p 11217 -d -u nobody
# Page cache. Bigger than most other caches.
memcached -m 128 -l 0.0.0.0 -p 11218 -d -u nobody
# Views definition cache.
memcached -m 1 -l 0.0.0.0 -p 11219 -d -u nobody
# Views data cache (may need to be increased if heavily used).
memcached -m 32 -l 0.0.0.0 -p 11220 -d -u nobody

# More caches that might be added later:
# Users table.
#/usr/bin/memcached -m 24 -l 0.0.0.0 -p 11219 -d -u nobody
# Path source cache.
#/usr/bin/memcached -m 4 -l 0.0.0.0 -p 11220 -d -u nobody
# Path destination cache.
#/usr/bin/memcached -m 6 -l 0.0.0.0 -p 11221 -d -u nobody
RETVAL=$?
echo
return $RETVAL
}

stop() {
if test "x`pidof memcached`" != x; then
echo -n $"Stopping $prog "
killall memcached
echo
fi
RETVAL=$?
return $RETVAL
}
case "$1" in
start)
start
;;
stop)
stop
;;

restart)
stop
start
;;
condrestart)
if test "x`pidof memcached`" != x; then
stop
start
fi
;;
*)
echo $"Usage: $0 {start|stop|restart|condrestart}"
exit 1
esac

¿Por que digo similar? Pues muy sencillo, basta con teclear:
memcached -h
y observar todos los parámetros de configuración que acepta en la línea de comandos. En mi opinión se debe tener especial cuidado a la hora de manejar la cantidad de memoria máxima a utilizar, el protocolo de escucha, el número máximo de conexiones simultáneas. 






[ Memcache funcionando en Drupal 6 ]


jueves, 10 de junio de 2010

Pistas para crear un módulo en Drupal.



Una vez has pasado la fase de theming y construcción del sitio en Drupal, es probable que tus inquietudes personales o bien exigencias profesionales te lleven a plantearte construír un módulo en Drupal.
Si bien es cierto que en castellano no abunda la documentación(de calidad me refiero), en el idioma de Shakespeare es impresionante todo lo que puedes encontrar en la red.
A modo de reseñas, dejo unos consejos que personalmente me han servido de mucho.
  • No obsesionarse con escribir código. Es probable que entre los más de 4.000 módulos encuentres algo que cubra parcialmente tus necesidades.
  • Lectura y compresión. El A.P.I de Drupal es muy completo, hay mucha y muy buena información. Su lectura, aunque sea parcial, es imprescindible.
  • Foros de Drupal.org. Los foros de Drupal imprescindibles.
  • Examinar código. Leer y comprender el código que otras personas han escrito te ayudará.
  • No desesperarse. No tires la toalla a las primeras de cambio. Puede ser frustrante al inicio, pero a medida que vas cumpliendo objetivos verás como todo cambia de color.
Enlaces que considero interesantes:
  • Mustarseedmedia: Aunque no tratan exclusivamente el tema de creación de módulos en Drupal, el videopodcast es de lo mejor que he visto hasta ahora en la red sobre Drupal(sobre videopodcast,claro)
  • Alan Palazzolo: La verdad es que este tipo es un crack. Ya me dejó impresionado en su charla sobre Openstreetmap en la DrupalCamp Spain 2010. En este enlace deja unas pista acerca como crear un módulo para que la localización sea un proceso sencillo.
  • Node Example: Ejemplo a estudiar en Drupal.org.
  • Cómo crear/añadir campos CCK: Este enlace es muy bueno, este también, y este, este otro es muy completo. Node export es la clave para exportar los campos CCK.
Es evidente que estas pistas se centrar en crear un módulo que defina el un tipo de contenido. A medida que avance en los dos módulos en los que estoy trabajando, intentaré postear alguna porción de código y a modo de ejemplo.

jueves, 3 de junio de 2010

Drupal 6.17 disponible



Unos de los proyectos que más ha crecido en los últimos años ha sido Drupal. Via @pcambra me entero de que se ha liberado la versión 6.17. Es evidente que no soy ningún experto en la materia, pero poco a poco, y tras mucha lectura y posterior testeo e implementación de los conocimientos adquiridos he aprendido a entender Drupal. "Aprender a entender", suena raro...pero con dosis de paciencia y muchas horas de trabajo estoy aprendiendo a entender el proyecto, pese a lo que alguno pueda pensar...

Drupal.org es un monstruo. Necesitas otra vida(ojalá) simplemente para llegar a ver la dimensión que ha alcanzado. Drupal no es sólo PHP y módulos. Ja! Esta es la visión de la ignorancia! Cachés, webservers, optimización de BBDD, backups y demás van de la mano de Drupal. Si te atreves a descuidar algún punto de esta enumeración, tu proyecto puede tener un acta de defunción en breves.

¿Aún no han oído hablar de NGINX? ¿lighttpd?¿APC?¿memcached? ¿Drupal Theming?

jueves, 22 de abril de 2010

Drush, Drupal y CLI

Hay días en los que es mejor no levantarse y otros en los que das gracias a quién sea por los nuevos conocimientos adquiridos. Hoy es uno de esos días. Como sabrán los lectores de este blog, desde hace un año y medio trabajo en un proyecto web que tiene como base el CMS Drupal.

Drupal es más que un CMS. Más que un framework de desarrollo. Drupal es un monstruo construído por miles de voluntarios organizados en http://www.drupal.org que a menudo se reúnen en eventos como DrupalCampSpain o DrupalCon y similares.A día de hoy no hay libro ni evento que describa la magnitud de este proyecto. Miles de voluntarios trabajan para mantener el core del CMS, documentar, reportar bugs, escribir módulos que añadan funcionalidades...

Conocía Drush.He leído mucho sobre este módulo, pero he preferido ir paso a paso, aprendiendo y asimilando conceptos en lugar de intentar absorver lo máximo en el menor tiempo posible.He aprendido a usar Views, CCK, implementar funcionalidades con el API, crear temas...pero faltaba drush.

¿Usas Drupal y no usas Drush? Pues mal hecho. No te atrevas a considerarte webmaster si no usas Drush.Mucha gente se apunta al carro de "drupalero" por el simple hecho de haber instalado Drupal en Ubuntu(uauuuuu!) o peor aún, en Windows XP!. Después te hablan de X e Y sin haber pasado antes por A,B,C,D...Aún no he llegado a la mitad del camino, pero poco a poco voy tachando items en mi TODO y las piezas comienzan a encajar.Pero bueno, ¿qué es Drush? Es acrónimos de DRupal y SHell. Básicamente es una "interfaz de linea comandos"(CLI) que nos permite realizar tareas rutinas de mantenimiento del sitio, tales como actualizar/habilitar módulos, actualizar la BBDD, realizar backups y un sin fin de operaciones. Si llegas a Drupal desde el mundo CLI/Linux/Unix entenderás de lo que hablo. He léido que también funciona en plataformas Micro$oft Window$, pero por "suerte" aún no he tenido el placer de testear su funcionamiento.Lo dicho, hoy ha sido un gran día. Realmente necesito muy poco para ser feliz: CLI!