2012-04-28 13 views
5

Ho letto la documentazione su come farlo, ma in pratica, sto avendo problemi. Nella mia app, ho 2 diversi database come descritto di seguito nel mio file database.yml.Come utilizzare più database in un'applicazione Rails Usando il database.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 

La mia domanda è un plotter dinamico che tracciare i dati in un database (base) senza avere una conoscenza di che cosa è nel database, oppure come la sua strutturato. Entrambi questi database contengono dati diversi. Il database SQLite che ho creato in un'app Rails separata.

L'app corrente che sto utilizzando è costruita attorno al database MYSQL, che costruisco esternamente. Ho copiato il database SQLite nella directory/db. Quindi nel mio modello principale, quando dico:

class Plot < ActiveRecord::Base 

    establish_connection :development 
    set_table_name "stock_test" 
    set_primary_key :id 

Tutto funziona perfettamente e dandy. Tuttavia, quando lo cambio a:

establish_connection :sqlite_test 
set_table_name "plots" 

e provo ad accedere a tale database tramite la console Rails, ottengo un errore che dice:

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

Non so perché questo è, dal momento che la il file database.yml indica chiaramente un adattatore? Quando lo faccio a mano nel mio modello, però, tutto funziona esattamente come dovrebbe.

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

Perché tutto il lavoro quando ho specificare manualmente che cosa è in database.yml, ma non quando mi basta usare il riferimento database.yml?

Grazie!

risposta

4

Ho provato a replicare e l'ho fatto funzionare. Ha a che fare con le convenzioni di denominazione: Sei in modalità sviluppo e AR cercherà il tag di sviluppo, che nel tuo caso non esiste per sqlite.

Ecco il mio 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 

Ecco il modello:

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

lavorato per me. Spero che questo ti aiuti.

+0

non funziona se si ha due 'sviluppo:' con chiave/valore diverso? – vol7ron

Problemi correlati