Archive for January, 2008

Resolver PHP: Fatal error: Allowed memory size of 7785608 bytes exhausted (tried…

Thursday, January 24th, 2008

Esto sucede cuándo los requerimientos de un script sobrepasan los límites de memoria por defecto. Para solucionar esto modifica el fichero php.ini, en Linux Debian por defecto puede estar en alguna de estas localizaciones dependiendo del servidor q tengas instalado:

/etc/php5/apache/php.ini
/etc/php5/apache2/php.ini

El parámetro en cuestión que hay que modificar es el siguiente, por defecto pone 16Mb

memory_limit = 16M;

Puedes ponerle lo que necesite tu script.

No se si después de esto hace falta reiniciar el Apache, yo por si acaso lo he reiniciado

Espero que os sirva ;)

Montar servidor de subversion en Debian Etch

Monday, January 14th, 2008

Con esto podremos tener un repositorio básico con autenticación con el que poder trabajar, para algo más complicado es mejor mirar la documentación de subversion

Para instalar subversion tecleamos:

apt-get install subversion

Creamos una carpeta para los repositorios y dentro un repositorio de prueba

mkdir /svn
svnadmin create /svn/prueba/

Arrancamos el servidor y nos aseguramos de que hay acceso desde fuera

svnserve -d -r /svn/

Si utilizamos iptables ejecutamos los siguientes comandos para dar acceso:

iptables -A INPUT -p tcp –dport 3690 -j ACCEPT
iptables -A INPUT -p udp –dport 3690 -j ACCEPT

Ahora para configurar la autenticación editamos el fichero (/svn/prueba/conf/svnserve.conf) y descomentamos y cambiamos las siguientes líneas:

anon-access = none
auth-access = write
password-db = passwd

Una vez modificado editamos el fichero de claves (/svn/prueba/conf/passwd) y añadimos un nuevo usuario:

[users]
samsagaz = secret

Para hacer el primer commit ejecutamos el siguiente comando:

svn import /codigo/prueba svn://servidor/prueba -m “Primer commit”

Y para el checkout ejecutamos:

svn://servidor/prueba –username samsagaz

Instalando ruby on rails, gems y mongrel en Debian

Monday, January 14th, 2008

Para instalar el framework de desarrollo de ruby tenemos que ejecutar el siguiente comando:

apt-get install ruby rubygems rails mongrel

Con esto instalaremos todo lo necesario para empezar a programar. El lenguaje, el gestor de paquetes gems, rails y el servidor web ligero mongrel.

Creando una aplicación nueva y probándola

Nos situamos en la carpeta dónde queramos crear el nuevo proyecto y tecleamos:

rails proyecto

Con esto creamos la estructura de ficheros inicial para la aplicación.

Ahora si queremos probar levantandola en mongrel entramos en la carpeta del proyecto y tecleamos:

mongrel_rails start &

Ahora deberías poder ver la dirección local: http://0.0.0.0:3000

Podemos especificar el puerto de escucha con

mongrel_rails start -p XXXX &

Ahora tenemos que configurar la base de datos que vamos a utilizar, rails la separa en 3 entornos, desarrollo test y producción. (se pueden configurar en el fichero proyecto/config/database.yml).

Creando un controlador de prueba

Ruby on rails utiliza el modelo vista controlador para mostrar los contenidos, podemos hacer una prueba creando un controlador nuevo.

ruby script/generate controller saludo index

Editamos el controlado (app/controllers/saludo_controller.rb)

class SaludoController < ApplicationController

def index
@message = “Hola Mundo!”
end
end

Ahora editamos la vista (app/views/saludo/index.html.erb) y mostramos el contenido de la variable @message

<h1><%=@message%></h1>
<p>Find me in app/views/saludo/index.html.erb</p>

Ahora si llamamos a la vista en http://0.0.0.0:3000/saludo deberíamos ver el Hola Mudo.

Balanceo de carga con Apache 2 + mod_proxy

Sunday, January 13th, 2008

Existen otras opciones a la hora de instalar un balanceador de carga, como Linux Virtual Server, finalmente me he decantado por utilizar mod_proxy debido a su sencillez y porque no es necesario actualizar el Kernel.

En las 3 máquinas es necesario tener instalado Apache 2 y en la máquina apache-balancer hay que tener activos los módulos proxy_balancer y proxy_http, para ello ejecutamos:

a2enmod proxy_balancer
a2enmod proxy_http

Antes de nada debemos preparar el fichero /etc/hosts de la máquina apache-balancer. Añadimos lo siguiente:

192.168.1.11 nodo1.mydomain.com
192.168.1.12 nodo2.mydomain.com

Ahora pasaremos a configurar el balanceo, para ello crea un sitio nuevo o utiliza el sitio por defecto (/etc/apache2/sites-available/default) y añade esta configuración antes de </VirtualHost> :

# cluster member 1
BalancerMember http://nodo1.mydomain.com:80 route=lb1

# cluster member 2
BalancerMember http://nodo2.mydomain.com:80 route=lb2

ProxyPass /balancer-manager !
ProxyPass / balancer://mycluster/ lbmethod=byrequests stickysession=BALANCEID
ProxyPassReverse / http://nodo1.mydomain.com/
ProxyPassReverse / http://nodo2.mydomain.com/

Guardamos el fichero y reiniciamos el Apache.

Con la opción stickysession=BALANCEID lo que conseguimos es pasar la variable de sesión al servidor dónde nos lleve el balanceador y asi permanecer en el mismo durante toda la sesión aunque actualicemos.

Para ello tenemos que configurar los nodos para que reciban la variable de sesión, editamos la configuración del VirtualHost y añadimos:

RewriteEngine On
RewriteRule .* – [CO=BALANCEID:balancer.lb1:.mydomain.com]

En el segundo nodo habría que poner lb2.

Reiniciamos los Apaches y ya deberíamos tener el balanceador funcionando ;)

Para probar puedes crearte un fichero distinto en cada máquina y borrar las sesiones autenticadas antes de recargar. En FireFox (Ctrl+Mayús.+Supr).