Tôi đang phát triển trên OSX và triển khai trên Linux. môi trường của tôi là:ActiveRecord :: ConnectionNotEstiết lập lỗi (mong muốn tải?)
Phát triển:
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
Những mảnh sau công việc mã trên OSX nhưng không phải trên 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(....)
và:
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
}
}
Khi tôi cố gắng chạy bất kỳ các mẩu mã trong Linux tôi nhận được lỗi sau:
.../connection_pool.rb:409: in `retrieve_connection': ActiveRecord::ConnectionNotEstablished (ActiveRecord::ConnectionNotEstablished)
Tôi đã thay đổi mã, và nó hoạt động trên 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(....)
và:
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
}
}
Có vẻ như tải mong muốn cho các hiệp hội đặt hàng đầu tiên không hoạt động trên môi trường thử nghiệm và trong ví dụ đầu tiên. Ngay cả khi tôi sử dụng "bao gồm" nó không hoạt động.
Có sự khác biệt nào giữa các phiên bản trên ActiveRecord hoặc PostgreSQL có thể gây ra điều này không?
Đây là những mô hình của tôi:
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
để đảm bảo phiên bản không phải là phiên bản của bạn, trao đổi kết nối cơ sở dữ liệu của bạn và phiên bản DEV của bạn trao đổi với cơ sở dữ liệu TEST của bạn. Bạn cần phải cấu hình lại (và chắc chắn rằng các cổng đang mở!), Nhưng ít nhất bạn biết nếu điều đó có thể gây ra nó. Bạn cũng có thể làm điều đó phó thơ (làm cho TEST của bạn kết nối với DEV của bạn). – Roger
bạn nói 'phát triển' và 'thử nghiệm' trong các thiết lập của bạn, bạn có thực sự có nghĩa là dev và sản xuất không? Hai môi trường bạn liệt kê có các phiên bản AR khác nhau. Có vẻ như không chắc với tôi rằng đây là vấn đề linux và OSX, và nhiều khả năng bạn đang sử dụng các phiên bản ActiveRecord khác nhau trong hai môi trường của mình và chạy vào một lỗi hoặc trường hợp cạnh kỳ lạ trong một trong số chúng. Bước đầu tiên là sử dụng cùng một phiên bản của ActiveRecord trong cả hai (mà không phải là khó để làm, là bạn không sử dụng một Gemfile.lock cùng giữa chúng? Bạn nên có). Khi bạn đã đảm bảo điều đó, hãy quay lại. – jrochkind
@jrochkind nó thực sự là dev và thử nghiệm. nhưng bạn chỉ cho tôi một cái gì đó tôi đã không nhận thấy: AR, Ruby và PostgreSQL có phiên bản khác nhau. tôi sẽ kiểm tra và cố gắng sửa các phiên bản. cảm ơn vì đã chỉ cho tôi điều đó. – Ecil