2011-10-13 10 views
6

Estoy desarrollando en OSX e implementando en Linux. Mis ambientes son:ActiveRecord :: ConnectionNot error establecido (¿carga ansiosa?)

Desarrollo:

OSX Lion 
Ruby 1.9.2p180 
ActiveRecord 3.0.9 
PostgreSQL 9.0 

prueba:

Ubuntu Server 11.04 
Ruby 1.9.2p290 
ActiveRecord 3.1.1 
PostgreSQL 9.1 

Las siguientes piezas de trabajo de código en OSX, pero no en 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(....) 

y:

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

Cuando trato de ejecutar cualquiera de estas piezas de código en Linux me sale el siguiente error:

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

he cambiado el código, y funciona en 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(....) 

y:

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

Parece que la carga ansiosa para las asociaciones de primer orden no funciona en el entorno de prueba, y en el primer ejemplo. Incluso si uso "incluye", no funciona.

¿Hay alguna diferencia entre las versiones en ActiveRecord o PostgreSQL que podrían estar causando esto?

Estos son mis modelos:

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

para asegurarse de que no es su versión, cambie la conexión de su base de datos y haga que su versión DEV hable con su base de datos TEST. Necesita reconfigurar (¡y asegúrese de que los puertos estén abiertos!), Pero al menos usted sabe si eso podría causarlo. También puede hacerlo viceversa (haga que su PRUEBA se conecte con su DEV). – Roger

+1

dices 'desarrollo' y 'prueba' en tus configuraciones, ¿realmente quieres decir desarrollo y producción? Los dos entornos que enumera tienen diferentes versiones de AR. Me parece poco probable que se trate de un problema de linux o de OSX, y es más probable que esté utilizando versiones diferentes de ActiveRecord en sus dos entornos y que se encuentre con un error o un caso extraño en uno de ellos. El primer paso es usar la misma versión de ActiveRecord en ambos (lo que no debería ser difícil, ¿no estás usando un Gemfile.lock igual entre ellos? Deberías). Una vez que hayas asegurado eso, vuelve de nuevo. – jrochkind

+0

@jrochkind es realmente desarrollador y prueba. pero me señalaste algo que no había notado: AR, Ruby y PostgreSQL tienen versiones diferentes. Lo verificaré e intentaré solucionar las versiones. gracias por señalarme eso. – Ecil

Respuesta

0

qué contexto se está utilizando este código en?

La razón es que, actualmente, ActiveRecord requiere alguna administración de grupo de conexiones si está ejecutando su código en un bucle de respuesta (como en un servidor). Rails aborda esto utilizando un middleware que gestiona las conexiones AR para usted fuera del respondedor principal de su aplicación. Sin embargo, si no tiene este tipo de envoltorio, puede tener otras rutinas de aplicación "acelerando" su grupo de conexiones, especialmente cuando se utilizan servidores con subprocesos.

+0

Este problema ocurrió hace alrededor de 2 años y fue cerrado por mi parte. Gracias por la preocupación – Ecil

Cuestiones relacionadas