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
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
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
@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