Cómo instalar Phalcon y PhalconDevTools en MAMP sobre OSX Yosemite

Sin duda el crecimiento de este framework de origen colombiano para PHP escrito en C (y últimamente en su propio lenguaje para crear extensiones - Zephir) es impresionante, y sin duda es gracias a su velocidad y uso mínimo de recursos que lo caracteriza.

Desde luego la instalación en los diferentes sistemas operativos está documentada en su sitio web, pero algunos quizás no tengan claro de cómo instalarlo en MAMP / MAMP PRO sobre OSX.

Sin embargo, la disponibilidad de esta extensión para sistemas Unix necesita ser compilado en nuestro servidor, presentando problemas la utilización de binarios precompilados obtenidos desde la web, ya que existen proyectos como php-phalcon-mamp en github donde ofrecen binarios que podemos utilizar en OSX con MAMP. En mis pruebas, no funcionaron, por tanto es mejor compilarlo.

Pre requisitos

El código fuente de Phalcon está alojado en los servidores de github, así que sería mejor tener instalado GIT en nuestra Mac para poder descargarlo con mayor facilidad.

Para poder compilar el código fuente en OSX necesitaremos GCC instalado. Si ya ha compilado algo con anterioridad o ya tiene instalado Xcode, posiblemente ya tenga instalado GCC, si no lo tiene aún la mejor forma de obtenerlo es con MacPorts o Homebrew. Yo lo instalé con Homebrew.

Adicionalmente quizás sea necesario tener incluido autoconf, automake, libtool y libiconv. Y como antes, instalarlo con MacPorts o Homebrew es la mejor forma. 

Empecemos:

1. Asegurémonos que MAMP está utilizando la versión de PHP que deseamos utilizar

Phalcon debe ser compilado según la versión PHP que vayamos a utilizar, así que será muy conveniente ver qué versión de PHP utilizaremos, por ejemplo, basándonos en la versión PHP que nuestro hosting ofrece.

Según phpinfo() en mi caso necesito PHP 5.4.34, la cual está incluida en la versión 3.0.7.3 de MAMP.

PHPinfo

 

MAMP PHP 5 4

Pero también podemos descargar versiones adicionales de PHP para MAMP desde su sitio oficial http://www.mamp.info/en/downloads/index.html

2. Asegurarnos que OSX utiliza MAMP desde la línea de comandos

OSX Yosemite viene con PHP incluido, por tanto deberemos utilizar PHP de MAMP.

Con los comandos which php y php -v podemos verificar la ubicación y versión de PHP que viene por defecto.

Php default

 Como vemos en la imagen, en Yosemite 10.10.2 que tengo instalada, viene PHP 5.5.14 ubicado en la carpeta /usr/bin/php, y no necesito de esa versión, sino una anterior.

Nótese que algunos hostings puedan ofrecer versiones de PHP más viejas, especialmente las baratas, por tanto realizar proyectos que utilicen estas versiones no aprovechan las nuevas características de PHP 5.4 o superiores, aunque últimamente muchos hostings van actualizándose a nuevas versiones de PHP.

Entonces, como necesitamos utilizar PHP de MAMP, debido a que éste no utiliza la versión que viene por defecto en Yosemite, también es necesario que reemplacemos el existente a nivel de la línea de comandos, especialmente para ejecutar scripts de automatización, CLI exclusivos del framework que utilicemos sea Phalcon, Laravel u otros.

La ubicación de PHP en MAMP normalmente es en:

/Applications/MAMP/bin/php/phpx.y.z/bin

Donde x.y.z la cambiamos con valores numéricos según la versión que deseemos utilizar, en mi caso php5.4.34.

En el terminal escribimos:

ej.

export PATH=/Applications/MAMP/bin/php/php5.4.34/bin/:$PATH


y luego verificamos si PHP cambió, como lo hicimos anteriormente con WHICH PHP y PHP -V 

Export php mamp

Y como era de esperarse, eso fue suficiente para que tengamos PHP de MAMP accesible desde la línea de comandos. Sin embargo, si vamos a estar utilizando en mayor parte PHP de MAMP y no la que viene por defecto, es mucho más conveniente incluirlo en el archivo .profile de nuestra cuenta de usuario. Para lo cual bastaría agregar esa línea en el archivo .profile (ubicado en /Users/<tuNombreDeUsuario>/.profile) la cual la aplicación Terminal de OSX lee al ejecutarse. También se puede agregar al archivo .bash_profile, y si ninguno de ellos aún existe, pues es hora de crear uno de ellos, basta con uno solo.

3. Obtener el código fuente de PHP correspondiente a la versión de PHP que utilizaremos en MAMP

Para compilar la extensión phalcon.so es necesario utilizar el código fuente de la versión PHP que la utilizará. Para ello nos dirigimos a la página oficial de descargas de PHP http://php.net/downloads.php, ahí mostrará la lista de versiones estables de cada versión. Normalmente van listados las últimas versiones de PHP según la rama, por ejemplo : PHP 5.6.x, PHP 5.5.y, PHP 5.4.z, variando en las últimas numeraciones.

En mi caso mostraba la versión 5.4.38 disponible, así que hago clic en el primer enlace (php-5.4.38.tar.bz2), pero tengan en cuenta que no voy a descargar esa versión, sino que servirá para descargar la versión 5.4.34 sólo cambiando ese valor al momento de descargar.

Al hacer clic en ese enlace, me dirigirá a la ubicación http://php.net/get/php-5.4.38.tar.bz2/from/a/mirror y tan sólo cambiamos el 38 por 34.

Php5 4 34 mirror

Elegimos el mirror que gustemos para descargarlo y luego descomprimiremos su contenido.

e.j

tar xvjf php-5.4.34.tar.bz2

Eso lo descomprimirá en una carpeta con el mismo nombre (sin extensión .tar.bz2), ósea php-5.4.34

4. Copiar el código fuente de PHP a la carpeta de MAMP

Copiamos el contenido que acabamos de descomprimir a la carpeta correspondiente a la versión de PHP elegida en MAMP.

ej.

/Applications/MAMP/bin/php/php5.4.34/include/php

Quizás no exista las carpetas /include/php dentro de la carpeta de la versión de PHP que deseamos utilizar, entonces la creamos y pegamos ahí el contenido descomprimido.

ej.

mkdir /Applications/MAMP/bin/php/php5.4.34/include/
mv php-5.4.34 /Applications/MAMP/bin/php/php5.4.34/include/php

5. Configurar el código fuente de PHP

Nos vamos a la ubicación nueva de estos archivos que acabamos de mover.

ej.

cd /Applications/MAMP/bin/php/php5.4.34/include/php/

y luego ejecutamos ./configure  lo cual tomará su tiempo según la velocidad de tu equipo. Todo esto es necesario para que detecte la ubicación de PHP de MAMP que vamos a utilizar, en especial las carpetas de extensiones donde será instalado phalcon.

Configure php

6. Descargar y compilar Phalcon

De acuerdo a las instrucciones de Phalcon http://phalconphp.com/en/download (podría cambiar en el futuro).

git clone --depth=1 git://github.com/phalcon/cphalcon.git

cd cphalcon/build

sudo ./install

No te preocupes de las advertencias (warning) que se mostrará durante la compilación de Phalcon. Al terminar mostrará el mensaje: “Thanks for compiling Phalcon!” 

Phalcon install

Ahora si verificamos la carpeta de extensiones de PHP elegida, veremos que ya estará phalcon.so ahí.

ej.

ls -l /Applications/MAMP/bin/php/php5.4.34/lib/php/extensions/no-debug-non-zts-20100525/ | grep phalcon

Phalconsopath

Como se nota, la extensión phalcon.so ya está ahí en modo ejecutable.

7. Agregar phalcon.so a php.ini

Normalmente el archivo php.ini estará ubicado dentro de la carpeta conf de la versión PHP correspondiente:

ej.

/Applications/MAMP/bin/php/php5.4.34/conf/php.ini

Pero ésta podría ser sobre escrita por MAMP, así que en MAMP editamos la plantilla correspondiente a la versión de PHP utilizada.

ej.

Archivo—>Editar Plantilla—>PHP—>PHP 5.4.34 php.ini

Ubicamos las otras extensiones (en PHP 5.4.34 de MAMP 3.0.7.3 la ubiqué en la línea 533 )para tener mayor orden, y agregamos phalcon.so

extension=phalcon.so

Hecho ese cambio reiniciamos el servidor web como lo sugiere MAMP, y ya estará disponible.

Phalcon php info

Sin embargo, desde la línea de comandos no está disponible, como lo pueden comprobar con el siguiente comando:

php --modules | grep phalcon

Entonces, también será necesario agregarlo en el archivo php.ini ubicado dentro de la carpeta PHP correspondiente, como se mención antes.

ej.

/Applications/MAMP/bin/php/php5.4.34/conf/php.ini

Y agregar extension=phalcon.so en este archivo es necesario para Phalcon Dev Tools, de lo contrario sólo estará disponible a nivel web.

Hecho esa modificación volvemos a comprobar y esta vez vemos que sí está.

Phalcon on cli

8. Instalar Phalcon Developer Tools

Finalmente, para aprovechar de las herramientas de desarrollo ofrecidas por Phalcon que facilita la creación de proyectos (creación de modelos, controladores, etc.), descargamos desde github el paquete comprimido. 

Nota: esta forma es distinta a las instrucciones oficiales http://phalconphp.com/en/download/tools, pero pueden usar la que mejor les parezca.

http://github.com/phalcon/phalcon-devtools/zipball/master

Comando para descargar con el mismo PHP:

php -r "set_time_limit(0);file_put_contents('phalcon-tools.zip',file_get_contents('http://github.com/phalcon/phalcon-devtools/zipball/master'));";

Lo descomprimimos donde deseemos ubicarlo, yo lo haré dentro de la carpeta de mi usuario (~/)

unzip phalcon-tools.zip

Esto creará una carpeta con el nombre similar a esto: 

phalcon-phalcon-devtools-a36ad71

Para mayor comodidad lo cambiamos, por ejemplo a phalcon-tools

mv phalcon-phalcon-devtools-a36ad71 phalcon-tools

Ahora enlazamos el archivo phalcon.sh como ejecutable phalcon para llamarlo con ese nombre desde la línea comandos, es más cómodo.

ln -s ~/phalcon-tools/phalcon.sh ~/phalcon-tools/phalcon

chmod +x ~/phalcon-tools/phalcon

Si ejecutamos php ~/phalcon-tools/phalcon.php veremos que ya se ejecuta en la línea de comandos, sin embargo al ejecutar nuestro recientemente creado ejecutable phalcon éste sugiere que necesita ser instalado a pesar de que ya funciona usando el comando anterior, por lo tanto es necesario agregarlo como lo haríamos en el archivo .profile de nuestro usuario.

Agregamos estas líneas al archivo .profile o .bash_profile

export PATH=$PATH:/Users/tuNombreDeUsuario/phalcon-tools
export PTOOLSPATH=/Users/tuNombreDeUsuario/phalcon-tools

Donde tuNombreDeUsuario es el nuestro.

Hecho esa modificación, cargamos la nueva configuración con el comando source ~/.profile pero esto sólo lo hacemos para no estar cerrando la aplicación Terminal, puesto que lo hará automáticamente la próxima vez que usemos la línea de comandos.

Al ejecutar phalcon desde la línea de comandos, debería mostrar algo similar a esto:

Phalcondevtools

Con esto ya podemos empezar a usar phalcon developer tools desde la línea de comandos:

ej. creación de un nuevo proyecto usando MVC.

phalcon project miBlog --use-config-ini --enable-webtools

Usando phalcon dev tools

 Ya tenemos corriendo el nuevo proyecto con Phalcon:

Miblog with phalcon

También podemos ver Phalcon Developer Tools desde el proyecto:

Webtools on custom domain

Sin embargo, si están usando un dominio personalizado, o si lo ven como en la imagen, es decir, sin estilos, eso se debe a que el archivo app/config/config.ini apunta a la dirección base de nuestro proyecto de forma errónea, por lo tanto bastará con modificarlo a la dirección correcta, en este caso apuntando a la dirección base “/“.

BaseUri

Y ya podremos verlo correctamente.

Phalcon webtools

Nótese que Scaffold requiere que configuremos la base de datos correctamente (usuario: root, pass: root por defecto en MAMP).

Extra:

Esto no es parte relacionado al tutorial, pero podría interesarles ya que sería muy útil que Phalcon Developer Tools lo haga por defecto, en especial para depurar errores en modo de desarrollo.

Por defecto, los errores lo muestra así:

Ugly error output

Pero si modificamos el archivo /public/index.php como se muestra en la imagen siguiente:

Better error debug output

Hemos agregado las dos líneas de $debug, y comentado el try catch. Ahora podemos ver los errores con un aspecto visualmente más agradable, y ahora es mucho más útil.

Better error output

 

Conclusión

La instalación de Phalcon en MAMP sobre OSX es relativamente sencilla, así como la instalación de Phalcon Developer Tools. Felizmente esto se realiza una sola vez, aunque se tiene que volver a realizar todo lo anterior si cambiamos a otra versión de PHP que aún no tenga phalcon, sino sólo cambiar los PATH según corresponda.

Fuentes: 

http://www.extreme-creations.co.uk/blog/how-to-install-phalcon-php-framework-with-mamp-on-osx/

http://phalconphp.com/en/download/tools

http://docs.phalconphp.com/en/latest/reference/tools.html

Comentarios