Aunque muchos no lo saben y Heroku no lo publicita es posible desplegar aplicaciones PHP o Perl en el servicio PaaS de Heroku. Claro que hay algunas limitaciones, la primera es que MySQL no es la base de datos relacional que ofrece la plataforma, sino que los es PostgreSQL. Esto hace que algunas muy populares webapps como WordPress por ejemplo no puedan ser deplegadas directamente en Heroku y tal vez es la razón por la cual no se publicita mucho el soporte a PHP. En este muy breve tutorial explicaremos como tener una aplicación PHP con base de datos PostgreSQL corriendo en Heroku.
Primero, estamos asumiendo que Ud. ya tiene una cuenta en Heroku (son gratuitas, puede registrarse aquí) y que tiene el Toolbelt instalado en su máquina de desarrollo que asumimos es un entorno Unix/Linux. Si estos dos requerimientos ya están satisfechos comencemos.
Creemos un directorio en donde podremos el código de nuestra aplicación:
mkdir TestHeroku
cd TestHeroku
Una vez dentro de dicho directorio usando su editor de texto favorito (pico, nano, vi, vim, emacs) cree un archivo index.php con este código:
<?php
$conn_string = "";
$dbconn = pg_connect($conn_string)
or die('No puedo conectarme: ' . pg_last_error());
echo "Conectado a la Base de Datos!";
?>
Se habran dado cuenta de que la cadena de conexión está en blanco, esto es debido a que debemos obtener esta información desde Heroku.
Ahora que ya tenemos creado el código de nuestra aplicación mínima, procedemos a crear el repositorio git, agregar el código que hemos creado a él, para ello son necesarios los siguientes pasos:
git init
git add .
git commit -m "Aplicación básica PHP con acceso a DB"
Hasta aquí está listo todo lo que necesitamos para poder comenzar a desplegar nuestro código en Heroku, ahora vienen dos pasos cruciales, el primero es crear nuestra aplicación en Heroku y el segundo es conseguir las credenciales para poder acceder nuestra DB. Para crear nuestra aplicación sólo debemos ejecutar este comando:
heroku create
Para obtener las credenciales de nuestra DB, primero hay que añadir el addon de soporte de PostgreSQL gratuito (la versión para desarrolladores) y luego preguntar por las credenciales, para ello ejecutamos estos dos comandos:
user@desktop:~/PHP/TestHeroku$ heroku addons:add heroku-postgresql:dev
Adding heroku-postgresql:dev on shielded-lake-3567… done, v4 (free)
Attached as HEROKU_POSTGRESQL_NAVY_URL
Database has been created and is available
! This database is empty. If upgrading, you can transfer
! data from another database with pgbackups:restore.
Use `heroku addons:docs heroku-postgresql:dev` to view documentation.
user@desktop:~/PHP/TestHeroku$ heroku pg:credentials NAVY
Connection info string:
"dbname=d49jgofa4ihhd1 host=ec2-45-152-86-231.compute-1.amazonaws.com port=5432 user=tbejgilawfitui password=43212UU2sdffEEW0dfQcYh8tP8fS sslmode=require"
Connection URL:
postgres://tbejgilawfitui:0QH82ZO2MWIuk0dfQcYh8tP8fS@ec2-54-225-68-241.compute-1.amazonaws.com:5432/d49jgofa4ihhd1
Observer que en estas capturas de pantalla, la información que Ud. debe tipear está en azul y la información que necesitamos para completar nuestro código está en rojo. Copie la información que Ud. obtiene en su terminal y edite el código del archivo index.php para que quede de esta manera:
<?php
$conn_string = "dbname=d49jgofa4ihhd1 host=ec2-45-152-86-231.compute-1.amazonaws.com port=5432 user=tbejgilawfitui password=43212UU2sdffEEW0dfQcYh8tP8fS sslmode=require";
$dbconn = pg_connect($conn_string)
or die('Could not connect: ' . pg_last_error());
echo "Connected to the DB";
?>
Ahora estamos listos para hacer un último commit y subir nuestra aplicación a Heroku haciendo esto:
git add .
git commit -m "Credenciales de DB incluídas"
git push heroku master
Ahora ya podemos ver el resultado de nuestra aplicación visitando el URL de la misma en Heroku. Por lo general los URL de las applicaciones de Heroku se parecen a este:
http://shielded-lake-3567.herokuapp.com/
Si no saben cual es el nombre de su aplicación, ni el URL para accesarlo y no desean loguearse a la interface web para averiguarlo, sólo ejecuten este comando dentro del directorio que contiene su aplicación para obtener dicha información:
user@desktop:~/PHP/TestHeroku$ heroku apps:info
=== shielded-lake-3567
Addons: heroku-postgresql:dev
Git URL: git@heroku.com:shielded-lake-3567.git
Owner Email: user@domain.com
Region: us
Repo Size: 192k
Slug Size: 9M
Stack: cedar
Tier: Legacy
Web URL: http://shielded-lake-3567.herokuapp.com/
Espero que este breve tutorial les haya sido de utilidad y quedo a la espera de sus comentarios.
Un gusto …
Mira este análisis, http://www.ibm.com/developerworks/java/library/j-paasshootout/index.html
Ya he trabajado con GAE tanto en Python como en Java espero probar la verisón PHP pero como comentas las conexiones a base de datos es donde cambia el concepto.