2012-08-16 27 views
6

Acabo de comenzar con Ruby y estoy jugando con Sinatra, pero no pude encontrar una manera de compartir las conexiones de base de datos entre las solicitudes.agrupación de conexiones de base de datos en ruby ​​

Vengo del desarrollo web Java y una de las cosas básicas que tienes que hacer es agrupar las conexiones de la base de datos, así que estoy seguro de que algo similar existe en Ruby, pero simplemente no puedo encontrarlo.

ActiveRecord y DataMapper ofrecen esta característica, pero no necesito ORM y solo quiero hacer consultas regulares de SQL.

¿Hay algún método específico para Sinatra o hay formas generales para todas las aplicaciones basadas en rack?

Respuesta

4

Para mantener una conexión, solo necesita crear una variable de instancia (las aplicaciones de Sinatra son solo objetos de todos modos) o una variable global. O una clase que maneja conexiones para ti. La mayoría de las bibliotecas de bases de datos de Ruby que he visto son adaptadores de bases de datos o simplemente clientes.

@db = Mysql2::Client.new #... 

O una variable global:

$db = Mysql2::Client.new #... 

Agrupación de conexiones es simplemente una manera de compartir un pequeño número de conexiones a través de múltiples hilos/fibras para la vida útil de la aplicación. Java, la JVM, hasta donde yo sé, no comparte conexiones entre procesos.

Sin embargo, hay un propósito general Connection Pool library for Ruby.

+0

Gracias, pero si creo una variable de instancia, cada vez que se crea el objeto de la aplicación, también se crea una nueva conexión, ¿verdad? Entonces, ¿cómo ayuda a compartir conexiones? – Nikoi

+1

La aplicación no se cierra entre las solicitudes a menos que la cierre manualmente. La aplicación se carga y responderá a las solicitudes y persistirá su conexión a lo largo de su vida útil. Es lo mejor que sé para la agrupación de conexiones en Ruby. –

+1

es probablemente una mala idea usar mysql2 directamente sin algún ORM como [Sequel] (http://sequel.rubyforge.org), [DataMapper] (http://datamapper.org) o [ActiveRecord] (http: // rubygems.org/gems/activerecord). En la mayoría de los casos, harán pooling automáticamente. Si "solo estás haciendo consultas SQL", tu aplicación acabará convirtiéndose en un desastre. Sequel es la mejor opción para acercarse lo más posible a SQL sin ir allí ya que el generador de consultas es bastante bueno. – tadman

Cuestiones relacionadas