2011-10-13 18 views
6

Sto sviluppando su OSX e distribuito su Linux. I miei ambienti sono:ActiveRecord :: ConnectionNotEstablished error (eager loading?)

Sviluppo:

OSX Lion 
Ruby 1.9.2p180 
ActiveRecord 3.0.9 
PostgreSQL 9.0 

prova:

Ubuntu Server 11.04 
Ruby 1.9.2p290 
ActiveRecord 3.1.1 
PostgreSQL 9.1 

I seguenti pezzi di lavoro il codice su OSX, ma non su Linux:

ei_doc_type = TaxDoc::Model::DocType.find_by_doc_type("EI") 
doc_version = ei_doc_type.doc_versions.find_by_doc_version(edoc.version) 
customer.electronic_invoices.create(....) 

e:

ei_doc_type = TaxDoc::Model::DocType.find_by_doc_type("EI") 
ei_doc_type.doc_versions.each { |doc_version| 
    @mappings[doc_version.doc_version] = Hash.new 
    doc_version.mappings.each { |mapping| 
    @mappings[doc_version.doc_version][mapping.column_name] = mapping.xml_element 
    } 
} 

Quando provo a fare funzionare uno di questi pezzi di codice in Linux ottengo il seguente errore:

.../connection_pool.rb:409: in `retrieve_connection': ActiveRecord::ConnectionNotEstablished (ActiveRecord::ConnectionNotEstablished) 

ho cambiato il codice, e funziona su Linux:

ei_doc_type = TaxDoc::Model::DocType.find_by_doc_type("EI") 
doc_versions = TaxDoc::Model::DocVersion.where(:doc_type_id => ei_doc_type.id, :doc_version => edoc.version) 
doc_version = doc_version.first 
customer.electronic_invoices.create(....) 

e:

ei_doc_type = TaxDoc::Model::DocType.includes(:doc_versions => :mappings).find_by_doc_type("EI") 
ei_doc_type.doc_versions.each { |doc_version| 
    @mappings[doc_version.doc_version] = Hash.new 
    doc_version.mappings.each { |mapping| 
    @mappings[doc_version.doc_version][mapping.column_name] = mapping.xml_element 
    } 
} 

sembra eager loading per le associazioni del primo ordine che non lavora per l'ambiente di test, e nel primo esempio. Anche se uso "include", non funziona.

C'è una differenza tra le versioni su ActiveRecord o PostgreSQL che potrebbero causare questo?

sono questi i miei modelli:

class DocType < EDocsDatabase 
    has_many :doc_versions, :dependent => :destroy 
    has_many :mappings, :through => :doc_versions 
    has_many :service_types 
end 

class DocVersion < EDocsDatabase 
    belongs_to :doc_type 
    has_many :mappings, :dependent => :destroy 
end 

class Mapping < EDocsDatabase 
    belongs_to :doc_version 
end 
+0

per assicurarsi che non sia la vostra versione, scambiare la connessione del database e avere la versione DEV parlare con il database TEST. Devi riconfigurare (e assicurarti che le porte siano aperte!), Ma almeno sai se questo potrebbe causarlo. Puoi anche farlo vice verse (fai in modo che il tuo TEST si colleghi al tuo DEV). – Roger

+1

dici "sviluppo" e "test" nelle tue impostazioni, vuoi dire dev e produzione? I due ambienti che hai elencato hanno versioni diverse di AR. Mi sembra improbabile che si tratti di un problema di Linux vs OSX, e più probabile che tu stia utilizzando versioni diverse di ActiveRecord nei tuoi due ambienti e che si trovi in ​​un bug o in uno strano caso limite in uno di essi. Il primo passo consiste nell'utilizzare la stessa versione di ActiveRecord in entrambi (che non dovrebbe essere difficile da fare, non stai usando un Gemfile.lock uguale tra loro? Dovresti esserlo). Una volta che ti sei assicurato, torna di nuovo. – jrochkind

+0

@jrochkind è davvero dev e test. ma tu mi hai indicato qualcosa che non ho notato: AR, Ruby e PostgreSQL hanno versioni diverse. lo controllerò e cercherò di correggere le versioni. grazie per avermelo detto – Ecil

risposta

0

quale contesto stai usando questo codice a?

Il motivo è - attualmente ActiveRecord richiede una gestione del pool di connessione se si sta eseguendo il codice in un ciclo di risposta (come in un server). Rails si rivolge a questo utilizzando un middleware che gestisce le connessioni AR al di fuori del risponditore dell'applicazione principale. Tuttavia, se non si dispone di questo tipo di wrapper, è possibile che altre routine di applicazioni "stiano" nel pool di connessioni, specialmente quando si utilizzano server con thread.

+0

Questo problema si è verificato circa 2 anni fa ed è stato chiuso da parte mia. Grazie per l'interessamento. – Ecil

Problemi correlati