Monthly Archives: October 2011

[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'] );

[OpenShift] Crear usuario, direccion y app

Hoy vamos a hablar de OpenShift de RedHat. OpenShift es un PaaS, es decir una plataforma para poder programar en la nube, es parecido a Google engine app, pero a diferencia, te dejan programar en Java, Perl, PHP, Python, and Ruby en su version Express y en su version Flex (avanzada) te dejan aparte, frameworks, y no-sql bd ( pero no he mirado cuanto cuesta).

Así aquí va una pequeña guia de como crearte un dominio y tu primera app, aparte de los problemas que he encontrado.
Para la guia sera en windows y con Cygwin, porque configuramos Openshift con ruby, así que nos bajamos Cygwin y le ponemos los paquetes que queramos, pero no olvides ruby.
Segun el tutorial de Openshift :

  • Prerequisites
    • Cygwin
    • The following optional cygwin components
      • openssh
      • ruby
      • make
      • gcc
      • git

Nos bajamos y extraemos rubygems from http://rubyforge.org/projects/rubygems, yo lo he descomprimido en el directorio tmp de cygwin. Y lo instalamos con:
$ ruby /setup.rb install

Despues instalamos el “gem” que nos deja manejar nuestra cuenta de Openshift:

$ gem install rhc

Ya tenemos todo, así que si no lo has hecho, ya puedes ir a registrarte a http://openshift.redhat.com/ y creo que se puede hacer por la web, pero yo me he creado el dominio desde la consola, escribiendo:

$ rhc-create-domain -n mydomain -l rhlogin

Y te pedira el password
Password: (type… type… type…)

Openshift te da un dominio y solo 1 por usuario! por tanto si me he registrado con user@fakemail.com y contraseña fakepw  y quiero que mi dominio sea gominola :D

sería $ rhc-create-domain -n gominola -l user@fakemail.com

Y crearas el dominio <nombredelapp>-gominola.rhcloud.com, es decir que se le añadira delante el nombre del app que crees.

Para crear un app :
$ rhc-create-app -a myapp -t php-5.3
Password: (type… type… type…)

en -t hay que elegir la librería con la que queremos programar ( yo lo elegí desde la web pero escribiendo $rhc-create-app -h te muestra la ayuda).

Edit: Mejor hacerlo desde comando para que te cree la carpeta con el proyecto, desde web tienes que lidiar con el git y me ha dado bastantes quebraderos.

Así que si creamos
$ rhc-create-app -a dulce -t php-5.3

tendremos dulce-gominola.rhcloud.com, al que podemos empezar a subir nuestra web. :D y eso es todo.
Hasta aquí me he quedado yo, si puedo pondré el siguiente paso de como desplegar nuestra app.

Problemas:

Durante la instalación me dio este error ruby :

C:cygwinlibruby1.8i386-cygwinreadline.so
to same address as parent(0x370000) != 0x2760000
C:cygwinbinruby.exe (3132): *** unable to remap

Para arreglarlo:
Salir de la consola de cygwin y entrar con la de windows (cmd)
navegar hasta c:cygwinbin
y escribir: ash rebaseall
Volver ha abrir la consola de cygwin y se supone que esta arreglado.