私は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
あなたのバージョンではないことを確認し、データベース接続を交換して、DEVバージョンをTESTデータベースに伝えさせてください。あなたは(ポートが開いていることを確認して)再設定する必要がありますが、それが原因で発生する可能性があることを少なくとも知っています。あなたはそれを逆にすることもできます(テストをあなたのデバイスに接続させる)。 – Roger
セットアップで「開発」と「テスト」と言うと、実際に開発と生産を意味していますか?あなたがリストする2つの環境には、異なるバージョンのARがあります。私はこれがLinux対OSXの問題であるとは思えず、あなたの2つの環境で異なるバージョンのActiveRecordを使用しており、それらのいずれかでバグや奇妙なエッジケースに陥っている可能性が高いです。最初のステップは、両方でActiveRecordの同じバージョンを使用しています(実行するのは難しいことではありませんが、Gemfile.lockを使用していないのですか?そうでしょう)。それを確認したら、もう一度元に戻ってください。 – jrochkind
@jrochkindそれは本当に開発とテストです。 RubyとPostgreSQLは異なるバージョンを持っています。私はそれを確認し、バージョンを修正しようとします。私に指摘してくれてありがとう。 – Ecil