Pracuję na OSX i wdrażam na Linuksie. Moje środowisko to:ActiveRecord :: ConnectionNotEstablished błąd (chętny ładowanie?)
Development:
OSX Lion
Ruby 1.9.2p180
ActiveRecord 3.0.9
PostgreSQL 9.0
Test:
Ubuntu Server 11.04
Ruby 1.9.2p290
ActiveRecord 3.1.1
PostgreSQL 9.1
Poniższe fragmenty prac kodu na OSX, ale nie w systemie 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(....)
oraz:
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
}
}
Kiedy próbuję uruchomić każdy z tych fragmentów kodu w systemie Linux pojawia się następujący błąd:
.../connection_pool.rb:409: in `retrieve_connection': ActiveRecord::ConnectionNotEstablished (ActiveRecord::ConnectionNotEstablished)
Zmieniłem kod i działa na systemie 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(....)
oraz:
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
}
}
Wygląda na to, że bardzo wcześnie ładuje się skojarzenia pierwszego rzędu w środowisku testowym, a w pierwszym przykładzie. Nawet jeśli użyję "obejmuje", to nie działa.
Czy istnieje różnica między wersjami ActiveRecord lub PostgreSQL, które mogą być przyczyną tego?
To są moje modele:
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
, aby upewnić się, że nie jest to Twoja wersja, zamień połączenie z bazą danych i poproś wersję DEV o rozmowę z bazą danych TEST. Musisz ponownie skonfigurować (i upewnić się, że porty są otwarte!), Ale przynajmniej wiesz, czy to może spowodować. Możesz także zrobić to wersetem (spraw, aby TEST był połączony z DEV). – Roger
mówisz "rozwój" i "test" w swoich konfiguracjach, czy naprawdę masz na myśli twórcę i produkcję? Dwa wymienione środowiska mają różne wersje AR. Wydaje mi się mało prawdopodobne, że jest to problem związany z linuxem i OS X, a bardziej prawdopodobne jest to, że używasz różnych wersji ActiveRecord w dwóch środowiskach i masz do czynienia z błędem lub dziwnym przypadkiem krawędzi w jednym z nich. Pierwszym krokiem jest użycie tej samej wersji ActiveRecord w obu (co nie powinno być trudne, czy nie używasz Gemfile.lock sam między nimi? Powinieneś być). Gdy już to zapewnisz, wróć ponownie. – jrochkind
@jrochkind to naprawdę dev i test. ale wskazałeś mi coś, czego nie zauważyłem: AR, Ruby i PostgreSQL mają różne wersje. sprawdzę to i spróbuję naprawić wersje. dzięki za wskazanie mi tego. – Ecil