viernes, 15 de agosto de 2008

Asignar Zona horaria al servidor Apache desde .htaccess

Durante la semana tuve un problema con un sitio web al que doy soporte, este sitio web tiene un componente que se encarga de manipular información de horarios de actividades deportivas, tiene interfaz para la introducción de tales datos, así como para las vistas en una página web.

El problema aquí es que esta programado para acomodarse dentro de la tabla dinámicamente generada que representa un mes, semana o día utilizando la hora del servidor en el que se encuentra hospedada como referencia. No había tenido problemas porque el servidor se encuentra en la misma zona horaria del lugar donde se realizan dichas actividades deportivas. No se que habrá ocurrido pero parece que modificaron la hora del servidor por aproximadamente 6 horas y afectó totalmente el componente.

Para resolver esto, no necesité modificar nada de código del componente, fué mucho más fácil, bastó con agregar la siguiente línea al archivo .htaccess en el directorio principal de mi sitio web:


SetEnv TZ America/Mexico_City

De esta forma hacemos un "override" de la hora definida en el servidor para utilizar la hora deseada.

miércoles, 9 de julio de 2008

Error CSS en Administración de VirtueMart desde el Frontend de JOOMLA.

Ahora que estuve jugandole un rato al código, instalación y administración de VirtueMart un cliente mío encontró un error en el panel administrativo que se puede accesar desde el Frontend de Joomla, aquí el punto es un error de CSS.
El error es que hace un despliegue del layout en un modo WIDE que hace que se agrande el panel mostrando una barra inferior en el navegador, si la deslizas hacia la izquierda puedes ver el contenido de los menús, sino únicamente verás el pedazo de tabla que encierra el menú, pero sin contenido.

Para resolver este problema hay que hacer una modificación en:
PATH_JOOMLA/components/com_virtuemart/js/extjs2/css/
Ahí encontrarás el archivo: ext-all.css

y dentro de este archivo tienes que realizar la modificación a:
ul.x-tab-strip{display:block;width:5000px;zoom:1;}

por algo como:
ul.x-tab-strip{display:block;width:800px;zoom:1;}

Tracker url de VirtueMart: http://dev.virtuemart.net/cb/issue/2097
Con esto el problema queda resuelto, cualquier pregunta, no duden en contactarme.

miércoles, 11 de junio de 2008

¿Que hacer cuando apache no carga PHP?

Durante mucho tiempo tuve el gran problema que al reiniciar mi servidor apache (sea cual sea la causa) no me cargaba el módulo de php, lo que hacía era:

#> apachectl restart

Y con eso efectivamente reiniciaba el serivdor web pero si entraba a alguna página php me daba opción para descargarla en vez de mostrarmela, después de sufrir esto por unos días encontre que lo que tenía que reiniciar era directamente el demonio y esto se hace (en Mandriva 2008):

#> /etc/rc.d/init.d/httpd restart

De esta forma se carga el servidor COMO DEBE SER.

jueves, 5 de junio de 2008

Como hacer a MySQL "NOT case sensitive"

Estaba probando unos queries SQL, previamente definidos en Windows por mi profesor, que están elaborados con mayúsculas y minúsculas sin importar el nombre de las tablas definidos en mi base de datos. Algo como esto:

SELECT CONCAT(Customers.CustLastName, ', ', Customers.CustFirstName) AS MailingName, Customers.CustStreetAddress, Customers.CustCity, Customers.CustState, Customers.CustZipCode FROM Customers UNION SELECT Vendors.VendName, Vendors.VendStreetAddress, Vendors.VendCity, Vendors.VendState, Vendors.VendZipCode FROM Vendors

Las letras marcadas en rojo representan una tabla en mi BD que esta definida en minúsculas.

Como ya llevo algunos meses intentando olvidar Windows lo estaba probando en Linux (Mandriva 2008.1) me di cuenta que no funcionaban y phpmyadmin siempre me regresaba un error de que la tabla no existía, algo como esto:

Después de estar leyendo un poco sobre las variables de MySQL concluí en varias cosas:

  1. No esta nada bien crear queries utilizando MayÚsCulas y minúsculas y mucho menos los nombre de las tablas, es ampliamente recomendable que estas se definan únicamente en minúsculas.
  2. Existen dos variables importantes en MySQL para permitir/restringir el uso de nombres con mayúsculas/minúsculas, estas son:
    • lower_case_file_system
    • lower_case_table_names
En mi caso la variable que tuve que modificar para poder realizar mis queries fue lower_case_table_names que permite lo siguientes valores:

0 - Los nombres de tablas y bases de datos se almacenan tal cual se hayan definido por el usuario en las sentencias CREATE DATABASE ó CREATE TABLE. Este valor es el predefinido para un sistema "case sensitive" como es Linux. Si este valor se asigna a un sistema "non-case sensitive" como Windows puedo producir serios errores en los índices.

1 - Valor predeterminado para sistemas Windows y MacOS. MySQL se encarga de convertir a minúsculas todos los nombres de tablas, tanto para almacenamiento como para búsqueda.

2 - Se almacenan tal cual se hayan definido por el usuario en las sentencias CREATE DATABASE ó CREATE TABLE. Al momento de realizar una búsqueda MySQL convierte todo a mínúsculas.

En mi caso la solución fue simplemente:
--lower_case_table_names = 1

¿Como modificar el valor de la variable lower_case_table_names?


Los siguientes pasos se deben realizar con permisos suficientes, en mi caso fue directamente con root.

  1. Como la variable lower_case_table_names no es dinámica, no puede modificarse mientras MySQL esta funcionando por que debemos parar el servicio mysqld
    • $root>/sbin/service mysqld stop
  2. Después vamos al archivo my.cnf que en Mandriva 2008.1 está en /etc
    • $root>vi /etc/my.cnf
  3. En este archivo vamos a la sección [mysqld] y agregamos
    • lower_case_table_names = 1
  4. Guardamos el archivo y reiniciamos MySQL:
    • :wq
    • /sbin/service mysqld start
Con los pasos anteriores bastó para mí, si tienen alguna duda, espero poder ayudarlos.

** No entiendo porque el procedmiento no es igual para lower_case_file_system pero al probarlo y modificar la variable a ON (ó 1) MySQL no reinicia por un problema de que no reconce la variable, si alguien sabe algo al respecto, por favor comenten!