Por cuestiones del azar me he visto complicado en un brete del cual no he podido escapar. Para un cliente en particular he tenido que establecer relaciones entre su Interbase 6 existente y mi proyecto Rails. A pesar de que a primera vista esto puede ser simple de hacer, en la práctica no lo es.
Los adaptadores directos, tales como FireRuby e incluso desde ODBC no funcionaron para esa versión de Interbase. Llegué incluso a escribir tareas rake que ejecutaban por fuera del sistema las consultas a Interbase y que luego incorporaban el dump obtenido a una réplica en la db local. Esto, si bien era efectivo, no era lo deseable, ya que eran más los problemas a mediano y largo plazo que las soluciones que aportaba, ya que se requería "daemonizar"
este rake en un cron, como una especie de broker que continuamente realizase las tareas de sincronización entre ambas DB. El riesgo de race conditions era mayor que el riesgo-pais de Argentina.
Necesitaba otra cosa.
Un buen día me topé con JBDC y su adaptador para Firebird. Despues de consultar con amigos, me decidí en pasar todo a JRuby usando Netbeans
como IDE de desarrollo. Probé de conectar Netbeans con la db por antonomasia de Interbase/Firebird, Employee.fdb y ¡Eureka, funcionó!.
Mi alegría aumentó cuando pude relacionar ActiveRecord con esta DB y ejecutar consultas al estilo Rails Way.
Update: mi alegría se fue por la cloaca cuando intenté insertar registros en Firebird. En la lista de desarrolladores de Jaybird comentan que ese driver no soporta aún la ejecución de sentencias SQL de inserción del estilo "INSERT INTO". En su lugar, recomiendan escribir la inserción directamente en Java.
Para lograr esto ocurrieron varios cambios: cambié de Ruby Enterpise Edition+Passenger a Jruby+GlassFish V3 Prelude, además migré el Interbase 6 corriendo en Windows 2000 a Firebird 1.5 SuperServer sobre Xubuntu. Las aplicación original del cliente corre en modo cliente en Win32 y accede al server linux sin problemas.
La conexión a la DB la realizo usando el adaptador Firebird para JDBC: Jaybird 2.1.6. Este adaptador es el que se encarga de generar los SQL que Firebird/Interbase comprende.
Requerimientos:
* Netbeans 6.5, que incluye JRuby, Rails, GlashFish V3 Prelude
* SDK 1.6
* Firebird 1.5.5 SuperServer
* Jaybird 2.1.6 para SDK 1.6, que es el que necesita Netbeans
* Firebird-jdbc-adapter.jar
* Una pizca de ingenio
Empecemos por Firebird:
Descomprimir FirebirdSS-1.5.5.4926-0.i686.tar.gz en un directorio, por ejemplo en /home/tu_nombre_de usuario/firebird1.5ss
en
la carpeta /firebird1.5ss encontraremos el instalador de Firebird.
Necesitaremos permisos de root para instalarlo, así como darle permisos
de ejecución al script de instalación.
Antes de ejecutar el instalador, verificamos si tenemos una librería que Firebird necesita para correr
$sudo apt-get install libstdc++5
Con este comando matamos dos pajaros de un tiro: verificamos que esté instalada libstdc++5 y de no ser así, la instalamos.
Seguidamente, continuamos con Firebird
$ sudo chmod a+x install.sh
$ sudo ./install.sh
Se
nos solicitará que ingresemos el password por defecto para el usuario 'SYSDBA'. Aquí uno puede colocar la que desee. En mi caso y teniendo en cuenta que es para development, utilizo 'masterkey'.
Netbeans:
Netbeans requiere del SDK 1.6 para funcionar.
les damos permisos de ejecución, tanto al SDK como a Netbeans
$ sudo chmod a+x jdk-6u11-linux-i586.bin
lo ejecutamos
$ sudo ./jdk-6u11-linux-i586.bin
Nos
aparecerá un disclaimer de licencia para preguntarnos al final si estamos de acuerdo. Le ponemos Yes y continuamos. Yo lo instalo en /opt
Instalamos Netbeans. Es posible que dependiendo de donde hayamos instalado el SDK, se nos solicite su ruta de instalación que deberemos pasar como argumento al instalador
$ sudo ./netbeans-6.5-ml-linux.sh
Si el SDK fue hallado, aparecerá el instalador gráfico de Netbeans.
Una vez dentro de Netbeans, elegimos la tercer pestaña que tiene como título "Services" y seleccionamos la opcion databases.
Se nos desplegará un arbol. Nos ubicamos en la opcion Drivers. Hacemos clik derecho y elegimos la única opción: "New driver..."

En el cuadro de diálogo presionamos Add...

navegamos hasta la carpeta en donde hayamos descomprimido el contenido de Jaybird.
Elegimos 'jaybird-full-2.1.6.jar' y aceptamos.
En el cuadro anterior tendremos algo como esto.
Si todo va bien tendremos un nuevo driver: 'Firebird (JCA/JDBC Driver)' en Netbeans
efectuamos la prueba con Employee.fdb. Para esto creamos una nueva conexión que utilizará una url de conexión
jdbc:firebirdsql:localhost/3050:employee.fdb
en /Firebird/aliases.conf encontraremos algo similar a esto
#
# List of known database aliases
# ------------------------------
#
# Example Databases:
#
employee.fdb = /opt/firebird/examples/employee.fdb
Con este alias, nos evitamos de escribir una url de conexión más larga. Es en este archivo que debemos declarar la ubicación de nuestra DB.
Realizamos la conexión usando el driver Firebird

Ingresamos como usuario SYSDBA y como clave, la que definimos en la instalación de Firebird (en mi caso masterkey)
Para iniciar la conexión se nos pedirá el user y passord
Navegamos en Employee.fdb

Ahora que tenemos Firebird en Netbeans, pasemos a hacer funcionar la conexión con Rails.
Debemos copiar driver-201-full.jar (es el adaptador JDBC para Firebird)
en $JRUBY_HOME/lib. Sino tienes definido $JRUBY_HOME, lo puedes buscar
en la instalación de JRuby que incluye Netbeans, en mi caso es '/usr/local/netbeans-6.5/ruby2/jruby-1.1.4/bin', entonces de este modo deberías copiar
$sudo cp driver-201-full.jar /usr/local/netbeans-6.5/ruby2/jruby-1.1.4/bin/lib
Una vez copiado el driver, debes declarar lo siguiente en database.yml de tu aplicación
development:
adapter: jdbc
username: sysdba
password: masterkey
driver: org.firebirdsql.jdbc.FBDriver
url: jdbc:firebirdsql:localhost/3050:database.fdb
Esto último lo tomé de Firebird and Rails using JRuby
La indentación es importante en este paso. Sino se respeta, no funciona la conexión.
Creamos un resource llamado 'employee' desde Netbeans
en el modelo Employee.rb declaramos el nombre de la tabla y el primary key
Grabamos y lanzamos una consola rails

Corremos un Employee.find :first y obtenemos el resultado
Comentarios recientes
38 weeks 4 days ago
40 weeks 2 days ago
1 año 20 weeks ago
1 año 22 weeks ago
1 año 35 weeks ago
1 año 40 weeks ago
1 año 45 weeks ago
1 año 45 weeks ago
1 año 46 weeks ago
1 año 46 weeks ago