Iloo

https://iloo.wordpress.com

Archivos por Etiqueta: warning

PHP: tips, limpiar el codigo

0fd309979dce4933f1ae8fc364a9febe

Si bien los mensajes de tipo warning o notice no causando problemas “reales” en el funcionamiento de una aplicación o al menos la mayoría piensa eso, la realidad es que si causan problemas y bastante serios.

En primer lugar para cualquier aplicación se tiene que habilitar el registro de logs, la importancia de eso lo dejo para otro post, cuando este archivo es demasiado grande (experiencia propia) ocasiona que el servidor y por tanto la aplicación funcionen mas lentos de lo normal. A demás es una de las razones para el famoso 500 Internal Server Error.

Algunas alertas comunes son las siguientes:

PHP Notice: Undefined index: var1 in …

Obviamente se esta buscando el index en un array o una variable enviada por get o post que no existe.

por ejemplo este error se reproduciria de la siguiente manera:

$var_array = array('var2' => 2, 'var3' => 3);
echo $var_array['var1'];

O el mas común que el archivo espere recibir datos enviados mediante get o post y que estos no hayan sido enviados. Por ejemplo:

if($_GET['var1'])
  echo 'yes';

Si var1 no fue enviada por el método get en este caso produciría la alerta.

Para esto es mejor verificar antes si la variable esta “seteada”

if(isset($_GET['var1']) && $_GET['var1'])
  echo 'yes';

PHP Notice: Undefined variable: var2 in …

Muchas veces vi que código de esta manera:

if ($a == 1)
  $b = 2;
echo $b;

Pero en el caso que la variable $a sea igual a 2 entonces la variable $b nunca seria inicializada, una solución es definir la variable antes:

$b = 0;
if ($a == 1)
  $b = 2;
echo $b;

Esto también pasa cuando se usa un array sin haber sido inicializado, por ejemplo:

foreach($orders as $order)
  $var_array[] = $order;
print_r($var_array);

La solución seria tan simple como definir la variable antes de usarla.

$var_array = array();
 foreach($orders as $order)
 $var_array[] = $order;
print_r($var_array);

PHP Notice: Use of undefined constant var3 – assumed ‘var3’ in …

Este es un clásico, la regla es: si el index de un array es un entero no se necesita comillas, si es una cadena si necesita comillas.

echo $array[0]; // bien
echo $array['0']; // bien
echo $array['index']; // bien
echo $array[index]; // MAL

PHP Notice: A session had already been started – ignoring session_start() in …

Si la sesion ya ha sido iniciada no es necesario volver a iniciarla. Si uno no esta seguro de haber iniciado la sesión mejor verificar antes de iniciarla:

if(!isset($_SESSION)) 
  session_start();

Estos son algunas sugerencias para arreglar y limpiar los warnings y notices en el log de php.

Anuncios

ProFTPD: no se levanta el servicio FTP

proftpd-logo

Sea cual sea el motivo por el cual no se levante este servicio, en primer lugar se debe realizar una verificación de las configuraciones del servicio, para esto se usa la siguiente orden:

proftpd --configtest

Un caso particular (y común) es la siguiente respuesta:

Checking syntax of configuration file
 - warning: unable to determine IP address of 'Domain'
 - ProFTPD terminating (signal 11)
 - FTP session closed.

La solución este este caso particular es configurar el archivo /etc/hosts agregando la dirección ip y el nombre del dominio asignado al equipo, por ejemplo:

123.456.789.123 Domain

Verificando de nuevo la configuración:

proftpd --configtest
Checking syntax of configuration file
Syntac check complete.

heroku: desplegar aplicaciones

heroku es un hosting para aplicaciones hechas en Ruby on Rails, un hosting bastante interesante y con un monton de add-ons para agregar mayor funcionalidad a las aplicaciones, más información en heroku.com/how.

Como dice el título, este es un breve resumen para poder desplegar aplicaciones en este hosting:

Tiendo en cuenta las siguientes consideraciones:

  • Versión de rails: 3.2.3
  • Base de datos: postgres
  • Control de versiones: git

Suponiendo que la aplicación ya esta en git.

Registrarse en heroku

Es necesario registrar en el sitio de heroku, se tienen varios planes, para probar se puede usar una cuenta gratuita la cual cuenta con todas las características mínimas necesarias para poder desplegar las aplicaciones.

http://api.heroku.com/signup

Instalar Toolbelt

También es necesario instalar heroku Toobelt, la aplicación para poder manejar heroku desde consola. Las plataformas disponibles son Windows, Mac OS y Debian/Ubuntu. Para Arch se tiene el paquete ruby-heroku.

http://toolbelt.heroku.com/

Loguearse en heroku

Se hace mediante consola:

heroku login

Ahí es necesario ingresar el nombre de usuario con el que se registro en heroku y la contraseña, si no tienes una clave pública el mismo programa te sugerirá crear una, lee bien todos los mensajes.

Crear un repositorio remoto de heroku

Suponiendo que ya se tiene git configurado y funcionando, dentro del directorio de la aplicación es necesario crear el repositorio, recuerdo que todo se hace mediante la consola:

heroku create --stack cedar

Aclaro que es muy importante leer todos los mensajes que devuelve la aplicación por consola.

Para poder ver los repositorios disponibles:

git remote -v

Crear la base de datos de postgres

Se realiza de manera sencilla, en consola:

heroku addons:add heroku-postgresql:dev --app herokuApp

Donde:

  • heroku-postgresql:dev, es el plan registrado, si el plan fuera otro se puede cambiar dev por ejemplo por ronin.
  • herokuApp, es el nombre de la aplicación creada en el paso anterior, se pueden ver las aplicaciones disponibles ingresando a la cuenta creada en heroku e ingresando a la sección MyApps.

Desplegar la aplicación

Hasta aquí la aplicación esta casi lista solo falta agregar los archivos a heroku:

git push heroku master

Ahora solo queda esperar que los archivos se suban a la cuenta de heroku, instalar las gemas y desplegar la aplicación, heroku lo hace todo.

Tal vez sea necesario crear la base de datos, nuevamente recuerdo leer los mensajes en consola

heroku run rake db:migrate

Errores comunes

DEPRECATION WARNING: You have Rails 2.3-style plugins in vendor/plugins!

Si este aparece puede suceder dos cosas:

1. Si el directorio vendor/plugins de la aplicación esta vacía entonces no es necesario hacer nada.

2. Si no, leer estos dos artículos:

heroku error: “Permission denied” (public key)

Es necesario agregar la clave pública del equipo a heroku:

heroku keys:add ~/.ssh/id_rsa.pub

Running `rake db:migrate attached` to terminal… up, run.1

/Users/user/.heroku/client/lib/heroku/client/reendezvous.rb:87:in `fixup’: undefined method

Bien, este error se presento en Mac, el archivo en cuestión es reendezvous.rb y en la función mencionada se tiene:

def fixup(data)
  data.force_encoding('utf-8')
  output.isatty ? data : data.gsub(/\cM/,"")
end

Se tiene que comentar la línea que causa el error, quedando de la siguiente manera:

def fixup(data)
  #data.force_encoding('utf-8')
  output.isatty ? data : data.gsub(/\cM/,"")
end

Tips útiles

1. Logs de heroku, muy útil para descubrir errores:

heroku logs --app herokuApp

2. Ver las aplicaciones corriendo en heroku:

heroku ps

3. Reiniciar aplicaciones en heroku:

Una vez visto las aplicaciones con el comando anterior:

heroku restart web.#

Donde # es el número de la aplicación.

4. Ver todos los comandos disponibles:

heroku help

5. Actualizar el repositorio heroku

git add .
git commit -m 'message to update'
git push heroku

Más información en:

http://devcenter.heroku.com/