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