Tag Archives: php

[OpenShift] Incluir BD en nuestra app

El siguiente paso, es incluir la BD, que no es del todo trivial:
Primero le indicamos que queremos incluir en nuestra aplicacion.
Con este comando vemos que nos dejan añadir, depende de la versión (Flex o express) pero seguro que esta mysql.

$ rhc-ctl-app -a MyApp -L

A continuación incluimos la BD y te saldrán los siguientes datos:

$ rhc-ctl-app -a MyApp -e add-mysql-5.1
Password:
Contacting https://openshift.redhat.com
Contacting https://openshift.redhat.com
API version:    1.1.1
Broker version: 1.1.1
RESULT:
Mysql 5.1 database added.  Please make note of these credentials:
Root User: admin
Root Password: ad3eR$4agk8z
Database Name: MyApp
Connection URL: mysql://127.1.1.10:3306/

Ahora pensaríamos que ya esta la bd, pero no, hay que modificar el fichero de build de la aplicación para que nos deje acceder. En la carpeta .openshift que se ha creado buscar:

.openshiftaction_hooksbuild

y copiar :

if ! /usr/bin/mysql -u "$OPENSHIFT_DB_USERNAME" --password="$OPENSHIFT_DB_PASSWORD" -h "$OPENSHIFT_DB_HOST" -e "show tables;" $OPENSHIFT_APP_NAME > /dev/null
then
/usr/bin/mysqladmin -u "$OPENSHIFT_DB_USERNAME" --password="$OPENSHIFT_DB_PASSWORD" -h "$OPENSHIFT_DB_HOST" create "$OPENSHIFT_APP_NAME"
fi
# Confirm database exists, if not create it
if ! /usr/bin/mysql -u "$OPENSHIFT_DB_USERNAME" --password="$OPENSHIFT_DB_PASSWORD" -h "$OPENSHIFT_DB_HOST" -e "show tables;" myapp > /dev/null
then
    echo
    echo "Database not found!  Creating and importing"
    echo
    /usr/bin/mysqladmin -u "$OPENSHIFT_DB_USERNAME" --password="$OPENSHIFT_DB_PASSWORD" -h "$OPENSHIFT_DB_HOST" create "myapp" 
    /usr/bin/mysql -u "$OPENSHIFT_DB_USERNAME" --password="$OPENSHIFT_DB_PASSWORD" -h "$OPENSHIFT_DB_HOST" myapp < "$OPENSHIFT_REPO_DIR/.openshift/action_hooks/bd.sql"
    echo
    echo "done."
else
    echo "Database found, skipping build"
fi

Solo hace falta cambiar myapp y el nombre del archivo sql con el que crear la bd. Así nos comunicamos directamente con el servidor y creamos nuestra bd.

Como bonus, hay que decir que las contraseñas y usuarios son variables del sistema con lo cual podemos referenciarlas así en nuestro código y no hay que tener que escribirlas.

define( "DB_SERVER",    $_ENV['OPENSHIFT_DB_HOST'] );
define( "DB_USER",      $_ENV['OPENSHIFT_DB_USERNAME'] );	
define( "DB_PASSWORD",  $_ENV['OPENSHIFT_DB_PASSWORD'] );