2012-04-28 28 views
5

He leído la documentación sobre cómo hacerlo, pero en la práctica, tengo problemas. En mi aplicación, tengo 2 bases de datos diferentes como se describe a continuación en mi archivo database.yml.Cómo usar varias bases de datos en una aplicación de Rails con la base de datos.yml

sqlite_test: 
    adapter: sqlite3 
    database: db/sqlite_test.sqlite3 
    table: plots 
    pool: 5 
    timeout: 5000 

development: 
    adapter: mysql2 
    encoding: utf8 
    reconnect: false 
    database: test 
    pool: 5 
    username: myname 
    password: mypassword 
    host: localhost 

Mi aplicación es un plotter dinámico que representar los datos en una base de datos (base) sin tener conocimiento de lo que hay en la base de datos, o cómo su estructurada. Ambas bases de datos contienen datos diferentes. La base de datos SQLite que creé en una aplicación Rails separada.

La aplicación actual que estoy utilizando se basa en la base de datos MYSQL, que construyo externamente. Copié la base de datos SQLite en el directorio/db. Entonces, en mi modelo principal, cuando digo:

class Plot < ActiveRecord::Base 

    establish_connection :development 
    set_table_name "stock_test" 
    set_primary_key :id 

Todo sale bien y dandy. Sin embargo, cuando lo cambio a:

establish_connection :sqlite_test 
set_table_name "plots" 

y tratar de acceder a esa base de datos a través de la consola de Rails, me sale un error diciendo:

>>ActiveRecord::AdapterNotSpecified: database configuration does not specify adapter 

No sé por qué es así, ya que el El archivo database.yml claramente especifica un adaptador? Sin embargo, cuando lo hago a mano en mi modelo, todo funciona exactamente como debería.

class Plot < ActiveRecord::Base 
establish_connection(:adapter => "sqlite3", :database => "db/sqlite_test.sqlite3", :pool => 5) 

¿Por qué todo el trabajo cuando especificar manualmente cuál está en el database.yml, pero no cuando sólo tiene que utilizar la referencia database.yml?

Gracias!

Respuesta

4

Intenté replicar y lo hice funcionar. Tiene que ver con convenciones de nomenclatura: Está en modo de desarrollo y AR buscará la etiqueta de desarrollo, que en su caso no existe para sqlite.

Aquí es mi database.yml:

development: 
    adapter: mysql2 
    database: se_development 
    username: root 
    pool: 5 
    timeout: 5000 

sqlite_development: 
    adapter: sqlite3 
    database: db/development.sqlite3 
    pool: 5 
    timeout: 5000 

Aquí es el modelo:

class Plot < ActiveRecord::Base 
    establish_connection 'sqlite_' + Rails.env 
end 

a mí me funcionó. Espero que esto ayude.

+0

¿Esto no funciona si tiene dos 'desarrollo:' con diferente clave/valor? – vol7ron

Cuestiones relacionadas