PHP, PEAR y PHPUnit para Yii en Mac OS X Lion
He tenido que montar un entorno de desarrollo para Yii, un framework de PHP, en mi Mac OS X Lion. Como he tenido que hacer varios apaños he recopilado todos los ajustes en esta entrada.
Antes de nada enumero las versiones del software utilizadas:
- Mac OS X 10.7.2
- PHP 5.3.6
- PEAR 1.9.4
- PHPUnit 3.5.15
- Selenium Server 2.8.0
- Yii 1.1.8
- Firefox 7.0.1
La mayoría de las acciones que comento han de realizarse con permisos de administrador.
Activar el servidor web con PHP
Mac OS X Lion incluye Apache con soporte para PHP. Sin embargo es necesario activarlo. Para ello en /etc/apache2/httpd.conf descomentamos:
LoadModule php5_module libexec/apache2/libphp5.so
Y en /etc copiamos el fichero de configuración de fábrica:
# cp /etc/php.ini.default /etc/php.ini
Nota: personalmente prefiero que mis entornos de desarrollo y pruebas sean lo más privados posibles. Por ello modifico el Listen de /etc/apache2/httpd.conf a
Listen 127.0.0.1:80
Solamente resta activar el servidor web desde System Preferences / Sharing / Web Sharing.
El directorio que se publica como página principal está ubicado en /Library/WebServer/Documents/ podemos utilizar directamente esta carpeta o bien utilizar carpetas personales ( http://localhost/~usuario/ ). La opción de carpetas personales busca el directorio Sites en el home del usuario, que se puede crear a partir del cuadro de configuración anterior.
Para probar que todo está funcionando lo más recomendable es publicar un fichero .php con un getinfo():
<?php phpinfo(); ?>
Instalar PEAR y PHPUnit
En las versiones anteriores de Mac OS X PEAR está directamente instalado, en Lion es necesario hacer un paso previo:
# php /usr/lib/php/install-pear-nozlib.phar
Con esto ya tenemos PEAR instalado. Actualizamos:
# pear upgrade-all
configuramos el autodiscover (para hacernos las cosas más fáciles) e instalamos PHPUnit:
# pear config-set auto_discover 1 # pear install pear.phpunit.de/PHPUnit
Solamente nos falta un detalle más, añadir el software instalado por PEAR a la configuración de PHP. Añadimos al /etc/php.ini:
include_path = "/usr/lib/php/pear/"
Para comprobar que todo va bien comprobamos la versión de PHPUnit
# phpunit --version
Montar y ejecutar las pruebas de un proyecto Yii
A partir de aquí lidiaremos con los problemas que surgen con Yii. Primero nos descargamos Yii y creamos un proyecto de prueba:
$ yii/framework/yiic webapp demo
Problema con date.timezone
Al acceder a la demo puede que nos muestre un mensaje de error como el siguiente:
It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function.
La solución más sencilla es configurar en /etc/php.ini el timezone, por ejemplo:
date.timezone = "Europe/Madrid"
Problema con Selenium, arrancar Firefox
Configuramos la URL para las pruebas en el fichero protected/tests/WebTestCase.php:
define('TEST_BASE_URL','http://localhost/~chernando/demo/index-test.php/');
Descargamos Selenium y lo dejamos ejecutando:
$ java -jar selenium-server-standalone-2.8.0.jar
e intentamos lanzar las pruebas funcionales del proyecto yii:
$ cd demo/protected/tests/ $ phpunit functional/SiteTest.php
Lo más probable es que falle el lanzamiento de iexplorer (bastante razonable en Mac OS X
) o que no encuentre firefox-bin ya que no está en el path. Para solucionarlos editamos protected/tests/phpunit.xml, eliminamos:
<browser name="Internet Explorer" browser="*iexplore" />
y modificamos la entrada del Firefox a nuestro, en mi caso es el siguiente:
<browser name="Firefox" browser="*firefox /Users/chernando/Applications/Firefox.app/Contents/MacOS/firefox-bin" />
Con esto podremos ejecutar las pruebas funcionales.
Problema con Selenium, fallan los test
Después de llegar hasta aquí me sorprendió bastante que de los tres tests que vienen de fábrica fallaran dos
Concretamente estos dos fallos:
Body cannot be blank.
Failed asserting that <boolean:false> is true.
Password cannot be blank.
Failed asserting that <boolean:false> is true.
Por suerte es un problema conocido y ya está corregido en el repositorio.
El problema es que no se espera a que se ejecuten las validaciones con JavaScript. El parche publicado corrige un par de líneas en el fichero protected/tests/functional/SiteTest.php que cambia los dos assert que fallan por waitFor, consiguiendo el comportamiento esperado.
Genial el artículo, gracias!
Me va a ser muy útil cuando tenga que montar un entorno de PHP aquí (que será en breves me temo).
Por simple curiosidad, y aunque se que es salirme bastante por la tangente… ¿Por qué Yii en vez de Simphony o CakePHP, o algo del estilo? Es que es la primera vez que escuchaba el nombre de ese framework y me ha picado la curiosidad…
Saludos!
Iñaki
2011/10/16 a 17:47
Me alegro de te sirva
Es una forma bastante limpia de montar un entorno de desarrollo PHP en el Mac OS X sin tener que recurrir a MAMP (para tener MySQL con Homebrew sobra).
Respecto a Yii frente a otras opciones… buena pregunta. El motivo principal: es el que usan en el curro
Y según la Wikipedia es bastante completo http://en.wikipedia.org/wiki/Comparison_of_Web_application_frameworks#PHP_2
chernando
2011/10/16 a 18:02
Vaya, ya era hora de ver que alguien usa Yii y habla español! muy interesante el artículo, acabo de descubrir tu blog. Te arego a twitter ^^
elchux
2011/11/15 a 22:36
Jejeje gracias por la opinión, a ver si tengo la oportunidad de escribir alguna cosa más de Yii.
chernando
2011/11/16 a 18:57
Hoy hemos comprado el MACMINI SERVER [LION]
Sencillamente pretendemos publicar nuestras web creadas con drupal 7.
Por favor…. solo pido unas pinceladas de tu sabiduria para poder instalar el entorno Drupal y las web que tenemos. PLEASE !!!!
Alex
2012/01/11 a 12:30
Alex, me temo que no tengo experiencia con la combinación de Drupal y Mac OS X Server.
Lo único que puedo recomendarte es que revises en /etc/apache/sites/ para configurar el sitio, una vez consigas servir un index.php con phpinfo() pruebes con el resto de requisitos de Drupal (si los tuviera).
Ánimo.
chernando
2012/01/12 a 20:26
Gracias de todas formas por publicar contenidos avanzados difíciles de encontrar en español.
Un saludo
Alex
alex
2012/01/20 a 13:24
Hola chernando, gracias por el post antes que nada… yo uso mamp (en mac os x) y tengo un problema… a veces el phpunit me funciona y otras no… y no se a qué obedece, escribo phpunit en la linea de comandos y no me da ningún mensaje… nada… sabes a qué puede ser debido?
David
2012/02/01 a 13:58
Mmmm… quizás haya algún problema entre el phpunit que tienes que instalar en Mac OS X y el que debería estar dentre de MAMP. Un ‘which phpunit’ debería decirte contra cuál estás trabajando.
chernando
2012/02/06 a 17:11