viernes, 14 de septiembre de 2007

Memory leaks re-revisited

De nuevo, mejorando lo que hay.

La extensión de Time mucho mejor así:

class Time
  def method_missing(method_name, *args)
    cadena = self.strftime('%Y/%m/%d')
    return cadena.send(method_name, *args)
  end
end


Gracias Javi por tu ayuda.

Salud¡

Memory leaks revisited

Qué hay de nuevo?

He tenido que apretar un tornillo que se había quedado suelto con el tema del cambio en el acceso a sqlserver. Ocurre que, con ADO.rb, los datos de tipo datetime eran devueltos como Time si se obtienen a través de un modelo o como String si se obtienen mediante una query directa a la base de datos. Con ODBC siempre son devueltos como Time.

Por ello he tenido que extender el objeto Time para que no casquen los accesos con [], por ejemplo, en los casos en los que ADO.rb retornaba String.

En environment.rb (o mejor en algún fichero incluido en éste):

class Time
  def [](range = nil)
    return self.strftime('%Y/%m/%d')
  end
end

Salud¡

jueves, 13 de septiembre de 2007

Memory leaks conectando a sqlserver

Danimata al aparato.

Llevo N días viendo cómo una de nuestras aplicaciones, que trabaja contra sqlserver, padece de alzehimer, quicir, pierde memoria con cada petición.

Mi conexión era la siguiente:

adapter: sqlserver
database: dddddd
username: uuuuuu
password: xxxxxx
host: hhhhhh

Mi amigo Xavi me ha pasado un par de links en el que esto mismo le ocurre aquí y allá a otras personas que trabajan contra sqlserver a través de ADO.rb de la librería ruby-dbi. Recomiendan pasarse a ODBC.

He creado el origen de datos y mi conexión ha quedado como sigue:

adapter: sqlserver
database: dddddd
username: uuuuuu
password: xxxxxx
host: DBI:ADO:Provider=SQLOLEDB;Data Source=midatasource;

Lo he hecho, y nada de nada, el alzehimer continúa. Claro que no me había deshecho totalmente de ADO.rb. De nuevo Xavi con la solución. Con lo que me queda la siguiente conexión:

adapter: sqlserver
mode: odbc
dsn: my_dsn
database: dddddd
username: uuuuuu
password: xxxxxx

Et voilá¡ Todo funcionanado sin pérdidas de memoria y con la sensación de que las conexiones funcionan mejor y más rápido.

Como siempre, salud¡