2015-03-30 11 views
6

Ho un'applicazione rota che utilizza due database in produzione ambiente, Users e Process. Il modello Users utilizza questa personalizzato ActiveRecord classe:Test di un'applicazione rota con più database

class UserActiveRecord < ActiveRecord::Base 
    establish_connection "#{Rails.env}_users_db" 
end 

class User < UserActiveRecord 
    ... 

Si noti che la connessione ad un database specifico viene istituito a seconda dell'ambiente. Per semplificare le cose, nella sperimentazione ambiente Ho un singolo database con tutte le tabelle dei due database di produzione, e il mio file database.yml simile a questa:

test: 
    adapter: postgresql 
    database: db_test 
    host: localhost 
    pool: ... 
    timeout: ... 
    username: ... 
    password: ... 

test_users_db: 
    adapter: postgresql 
    database: db_test <--- Notice that this is the same database only in test env 
    host: localhost 
    pool: ... 
    timeout: ... 
    username: ... 
    password: ... 

L'applicazione funziona benissimo in produzione, ma quando Eseguo qualsiasi test che faccia riferimento alla classe User, i blocchi di test nel punto esatto in cui viene utilizzato User e non accade nulla, non mostra alcun errore, non esce, continua semplicemente ad aspettare.

Ho verificato due volte e la tabella USERS esiste nel database di test, infatti se la cancello manualmente ottengo l'errore che la tabella non esiste e quando la creo nuovamente ottengo lo stesso comportamento riportato nel paragrafo precedente.

Non ho idea del perché questo sta accadendo, qualche idea su come posso risolvere questo problema? o come posso eseguire il debug in modo che possa arrivare alla radice del problema? Se aiuta, sto usando Ruby 1.9.3, Ruby on Rails 3.2.19 e PostgreSQL 9.3.5; eventuali dettagli aggiuntivi saranno pubblicati come richiesto.

+0

Siamo stati perplessi da questo problema da qualche tempo. Qualche esperto di Ruby che può dare una mano? dì, @ ChrisJester-Young ;-)? –

+1

L'istanza di Postgre è configurata per consentire più di 1 connessione? Anche se i database sono gli stessi nell'ambiente di test, le rotaie creeranno quasi sicuramente un'altra connessione al database a causa delle due diverse configurazioni del database. Vale anche la pena di verificare che supporti abbastanza connessioni per entrambe le dimensioni del pool. – Shadwell

+1

Prova 'establish_connection" # {Rails.env} _users_db "a meno che Rails.env.test?" Confermi che questa linea è il colpevole. Potrebbe essere qualcos'altro sta succedendo. –

risposta

0

Hai provato a dichiarare esplicitamente che si tratta dello stesso database? Prova a modificare il file database.yml a guardare come questo:

test: &default_test 
    adapter: postgresql 
    database: db_test 
    host: localhost 
    pool: ... 
    timeout: ... 
    username: ... 
    password: ... 

test_users_db: 
    <<: *default_test 
Problemi correlati