domingo, 3 de abril de 2011

Instalar y configurar ambiente Linux con Ruby para aplicacion Genexus Ev2 para Android

Luego de hacer mil pruebas voy a comentar cómo hacer para tener un ambiente Linux, en mi caso la distro que utilice fue Ubuntu, con Ruby, en mi caso la versión 1.9.1 que es la que funcionaba con Genexus Evolution 2 (beta 2 y algún nigth buils mas, pero creo que no me equivoco si digo que desde evolution 1 en delante, hasta hoy funciona), y una aplicación en mi caso particular para Android.

Perimo contarle que hice muchas pruebas, en las que utilizando Ubuntu Desktop 10.10 (supongo que server 10.10 es lo mismo), no pude llegar a que funcionara, el problema es que instales lo que instales, de ultima queda instalado Ruby 1.9.2, y esto no le gusta a las aplicaciones Genexus.

Las otras pruebas las realice (y en esta si me quedo andando) con Ubuntu Server 10.4.

También les cuento que probé varias formas de instalar, tanto ruby como las otras cosas que necesito, por ejemplo passenger, y la única que me función es la que voy a describir abajo, probar instalando por rvm (que es un manejador / instalador de ruby, dicho muy brutamente), con el código fuente, a la vieja usanza del famoso make, make install, con apt-get, pero repito la única forma que me anduvo fue como describo (para obtener este manual estuve trabajando más de 1 semana entera, y muchas horas en cada dia)

Bueno me base en un manual que la gente de artech tienen desde hace tiempo y mucha ayuda de alguien de Artech (su nombre es Daniel Mendez, y es un conocido de los eventos gx, por más que nunca hable con el), para el que quiera mirarlo les deja el link http://wiki.gxtechnical.com/commwiki/servlet/hwiki?Linux+setup+for+running+Ruby+applications+using+mod-rack

Pero con este manual no basta (por lo menos a mi no me basto ni por casualidad).

Empecemos:

Paso 1: Instalar Ruby:

Para esto ejecutamos lo siguiente (recordar que esto es para Ubuntu Server 10.4 en la versión más nueva no funciona porque termina instalando la versión 1.9.2)

$ sudo apt-get install ruby1.9.1-dev ruby1.9.1 ri1.9.1 rdoc1.9.1 irb1.9.1 libreadline-ruby1.9.1 libruby1.9.1

Paso 2: Crear los links a lo instalado:

$ sudo ln -s /usr/bin/ruby1.9.1 /usr/local/bin/ruby

$ sudo ln -s /usr/bin/ri1.9.1 /usr/local/bin/ri

$ sudo ln -s /usr/bin/rdoc1.9.1 /usr/local/bin/rdoc

$ sudo ln -s /usr/bin/irb1.9.1 /usr/local/bin/irb

$ sudo ln -s /usr/bin/gem /usr/local/bin/gem

Esto se puede hacer acá o más adelante, pero como lo necesito lo hago acá, si nos fijamos en la carpeta /usr/local/bin, vamos a ver que el link a gem no está bien (debe de aparecer en rojo), pero por ahora la dejamos así.

Paso 3: Instalar algunas gemas que precisamos.

$ sudo apt-get install libmysql-ruby1.9.1

$ sudo apt-get install rubygems1.9.1

$ sudo apt-get install libmysqlclient15-dev

Para este paso y para todos los que vienen cada cosa que instala debemos de ver que no quiera instalar algo distinto a la versión 1.9.1, si por alguna cosa dice que quiere instalar alguna otra versión, tenemos que buscar la vuelta para no hacerlo.

Paso 4: Instalar gema passenger

$ sudo gem install passenger

A esta altura si nos fijamos el link de gem que hicimos en el punto 2 ya debe de estar verde.

Para cerciorarnos que todo sigue bien desde la consola debemos de ver la versión de ruby

$ ruby -v

Si esto nos dice 1.9.1 esta todo bien, si dice otra cosa algo hicimos mal y no creo que funcione la aplicación genexus.

Paso 4: Instalar passenger.

Primero tenemos que descargarnos passenger, yo la versión que instale fue la 3.0.5. Luego que lo tengamos lo copiamos a alguna ruta, en mi caso /home/teto/passenger, luego entramos a la carpeta bien (la van a ver dentro de lo que descomprimimos), y le daremos permiso de ejecución y ejecutamos lo siguiente:

$ cd ./passenger-X.X.X/bin/
$ chmod 777 passenger-install-apache2-module
$ ./ passenger-install-apache2-module

Esto es interactivo, es decir que nos va tirando por consola varios mensajes, el primero es que va a empezar a trabajar, luego hace un chequeo, y acá es donde empieza a complicarse un poco la instalación, ya que casi seguramente no pase todos los chequeos, pero al final el instalador nos va diciendo que nos está faltando y cómo podemos hacer para instalarlo, todo es con apt-get, pero aca hay que tener mucho, mucho, cuidado, ya que si empezamos a ejecutar lo que nos dice, sin mirar lo que va a instalar (sobre todos las dependencias que necesitan los paquetes que instalamos), que en ningún momento nos diga que va a instalar algo distinto a ruby 1.9.1. Mi consejo es que vayan instalando de a una y que vayan mirando las dependencias, y si algo les da una dependencia de con un ruby 1.8 (este fue mi caso), que lo dejen de lado y vayan instalando lo otro, que nos dijo, o buscando la versión 1.9.1 del paquete. Sé que no es muy específico lo que digo pero solo en un par de paquetes nos da problemas, la gran mayoría se pueden instalar directamente.

Cuando se termina de instalar passenger, nos da 3 renglones que tenemos que guardarlos para poner en el archivo de configuración de apache.

Si llegamos a este paso ya tendríamos casi todo pronto, lo que nos falta ahora es tener apache instalado, y configurado.

Paso 4: instalación y configuración de apache2.

$ sudo apt-get install apache2


En el archivo /etc/apache2/apache2.conf al final agregamos las 3 líneas que nos dio el instalador
de passenger en mi caso es algo así



LoadModule passenger_module
/home/teto/ruby/passenger-3.0.5/ext/apache2/mod_passenger.so
PassengerRoot /home/teto/ruby/passenger-3.0.5
PassengerRuby /usr/bin/ruby1.9.1


Ademas tenemos que modificar el httpd.conf para indicar el directorio virtual del apache,
en mi caso es algo asi (esto también lo indica el instalador de passenger pero lo que nos
pone no está del todo bien)


VirtualHost // esto va entre simbolos de mayor menos
ServerName localhost
DocumentRoot /home/teto/ruby/aplicacion/public
Directory /home/teto/ruby/ aplicacion /public
// esto va entre simbolos
// de mayor menos
AllowOverride all
Options -MultiViews
/Directory
// esto va entre simbolos de mayor menos
/VirtualHost // esto va entre simbolos de mayor menos

Si se fijan, mi aplicación , se llama aplicación, pero tenemos que indicar hasta public.

Paso 5: copiar la aplicación.

Bueno esto es la parte fácil (creo), teniendo ya compilada y bien configurada la aplicación en genexus, recordar poner bien la base de datos, el webroot que tienen que tener algo asi: http://ipdelservidor/aplicacion, luego generamos y compilamos, para que nos cree todos los objetos que necesitamos.

Luego detecatamos donde nos crea los objetos (si lo dejaron por defecto estaría en RubyModel), y copiamos todo, a la carpeta del servidor /home/teto/ruby/aplicacion.

Luego creamos dentro del servidor una carpeta tmp y una public (/home/teto/ruby/aplicación/tmp y /home/teto/ruby/aplicación/public)

Luego (y esto no se si es necesario y me parece que no pero yo lo hago por las dudas) encontramos la carpeta gxruby de donde instalamos genexus y la copiamos también a la carpeta /home/teto/ruby/aplicación.

Paso 6: probar que funcione.

Lo podemos probar desde el emulador o desde algún celular que tenga android, si es desde el emulador solo tenemos que darle play a genexus (si tenemos todo bien configurado, la base creada etc., la aplicación se muestra en el emulador) o ejecutar nuestra aplicación en el cel.

Bueno con esto a mí me funciono, por favor si hay algún error o si alguien tienen una forma más fácil, me lo comenta para investigarlo.

No hay comentarios: