2011-10-13 18 views
6

私はOSX上で開発しており、Linux上に展開しています。私の環境は以下のとおりです。ActiveRecord :: ConnectionNotEstablished error(eager loading?)

開発:

OSX Lion 
Ruby 1.9.2p180 
ActiveRecord 3.0.9 
PostgreSQL 9.0 

がテスト:

Ubuntu Server 11.04 
Ruby 1.9.2p290 
ActiveRecord 3.1.1 
PostgreSQL 9.1 

OSX上ではなく、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(....) 

と:

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

私は、Linuxのコードのこれらの作品のいずれかを実行しようとすると、私は次のエラーを取得する:

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

私は、コードを変更し、そしてそれは、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(....) 

と:

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

最初の注文の関連付けの熱意がテスト環境や最初の例では機能していないようです。私が「インクルード」を使用しても、動作しません。

これを引き起こしているActiveRecordまたはPostgreSQLのバージョンに違いはありますか?

これらは私のモデルです:

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

あなたのバージョンではないことを確認し、データベース接続を交換して、DEVバージョンをTESTデータベースに伝えさせてください。あなたは(ポートが開いていることを確認して)再設定する必要がありますが、それが原因で発生する可能性があることを少なくとも知っています。あなたはそれを逆にすることもできます(テストをあなたのデバイスに接続させる)。 – Roger

+1

セットアップで「開発」と「テスト」と言うと、実際に開発と生産を意味していますか?あなたがリストする2つの環境には、異なるバージョンのARがあります。私はこれがLinux対OSXの問題であるとは思えず、あなたの2つの環境で異なるバージョンのActiveRecordを使用しており、それらのいずれかでバグや奇妙なエッジケースに陥っている可能性が高いです。最初のステップは、両方でActiveRecordの同じバージョンを使用しています(実行するのは難しいことではありませんが、Gemfile.lockを使用していないのですか?そうでしょう)。それを確認したら、もう一度元に戻ってください。 – jrochkind

+0

@jrochkindそれは本当に開発とテストです。 RubyとPostgreSQLは異なるバージョンを持っています。私はそれを確認し、バージョンを修正しようとします。私に指摘してくれてありがとう。 – Ecil

答えて

0

あなたがこのコードを何コンテキストを使用していますか?

理由は - 現在、ActiveRecordは応答ループ(サーバーなど)でコードを実行している場合、接続プールの管理が必要です。 Railsは、メインのアプリケーションレスポンダの外部にあるAR接続を管理するミドルウェアを使用してこれに対処します。ただし、この種のラッパーがない場合は、特にスレッド化されたサーバーを使用しているときに、接続プール上に他のアプリケーション・ルーチンが「ステップしている」ことがあります。

+0

この問題は2年ほど前に起こり、私のところで閉鎖されました。懸念してくれてありがとう。 – Ecil

関連する問題