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