2011-10-13 44 views
6

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 
+0

để đả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

+1

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

+0

@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

Trả lời

0

bối cảnh mà bạn đang sử dụng mã này gì trong?

Lý do là - hiện tại ActiveRecord yêu cầu một số quản lý nhóm kết nối nếu bạn đang chạy mã của bạn trong một vòng lặp phản hồi (như trong máy chủ). Rails định địa chỉ này bằng cách sử dụng phần mềm trung gian quản lý các kết nối AR cho bạn bên ngoài ứng dụng trả lời chính của bạn. Tuy nhiên, nếu bạn không có loại trình bao bọc này, bạn có thể có các thói quen ứng dụng khác "bước" trên nhóm kết nối của bạn, đặc biệt là khi sử dụng các máy chủ luồng.

+0

Sự cố này xảy ra khoảng 2 năm trước và nó đã bị đóng một phần. Cảm ơn sự quan tâm. – Ecil

Các vấn đề liên quan